跳到主要內容

dead_null_aware_expression

左側運算元不能為 null,因此右側運算元永遠不會執行。

描述

#

分析器會在兩種情況下生成此診斷資訊。

第一種情況是,當 ?? 運算子的左側運算元不能為 null 時。只有當左側運算元的值為 null 時,才會評估右側運算元,而由於左側運算元不能為 null,因此右側運算元永遠不會被評估。

第二種情況是,當使用 ??= 運算子的賦值表示式的左側不能為 null 時。只有當左側的值為 null 時,才會評估右側,而由於左側不能為 null,因此右側永遠不會被評估。

示例

#

以下程式碼會生成此診斷資訊,因為 x 不能為 null

dart
int f(int x) {
  return x ?? 0;
}

以下程式碼會生成此診斷資訊,因為 f 不能為 null

dart
class C {
  int f = -1;

  void m(int x) {
    f ??= x;
  }
}

常見修復方法

#

如果此診斷資訊報告的是 ?? 運算子,則移除 ?? 運算子和右側運算元

dart
int f(int x) {
  return x;
}

如果此診斷資訊報告的是賦值表示式,且該賦值不需要,則移除該賦值。

dart
class C {
  int f = -1;

  void m(int x) {
  }
}

如果需要該賦值,但應基於不同的條件,則重寫程式碼以使用 = 運算子和不同的條件。

dart
class C {
  int f = -1;

  void m(int x) {
    if (f < 0) {
      f = x;
    }
  }
}