跳到主要內容

inconsistent_pattern_variable_logical_or

變數“{0}”在此邏輯或模式分支中具有不同的型別和/或最終性。

描述

#

當邏輯或模式的所有分支上宣告的模式變數在每個分支上型別不同時,分析器會產生此診斷。當變數在不同分支上具有不同的最終性(finality)時,也會產生此診斷。在邏輯或模式的多個分支上宣告的模式變數要求在每個分支上具有相同的型別和最終性,以便在邏輯或模式守護的程式碼中能夠確定該變數的型別和最終性。

示例

#

以下程式碼會產生此診斷,因為變數 a 在一個分支中被定義為 int 型別,而在另一個分支中被定義為 double 型別

dart
void f(Object? x) {
  if (x case (int a) || (double a)) {
    print(a);
  }
}

以下程式碼會產生此診斷,因為變數 a 在第一個分支中是 final 的,而在第二個分支中不是 final

dart
void f(Object? x) {
  if (x case (final int a) || (int a)) {
    print(a);
  }
}

常見修復

#

如果變數的最終性不同,請確定它應該是 final 還是非 final,並使各情況保持一致

dart
void f(Object? x) {
  if (x case (int a) || (int a)) {
    print(a);
  }
}

如果變數的型別不同,且型別對於匹配條件並非關鍵,請確保變數在兩個分支上具有相同的型別

dart
void f(Object? x) {
  if (x case (num a) || (num a)) {
    print(a);
  }
}

如果變數的型別不同,且型別對於匹配條件至關重要,則考慮將條件拆分為多個 if 語句或 case 子句

dart
void f(Object? x) {
  if (x case int a) {
    print(a);
  } else if (x case double a) {
    print(a);
  }
}