跳到主要内容

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;
    }
  }
}