在可能的空值上调用方法时使用问号运算符?

dst*_*opf 2 dart

我有一个包含可能为空的对象的变量。尝试调用方法时,我必须检查null。如果变量为null,我希望结果为false。对此有什么好的和易读的样式?

例如

class MyClass {
  bool boolMethod() {
    return true;
  }
}

void main() {
  MyClass mc = new MyClass();
  MyClass mcnull = null;

  bool val1 = mc?.boolMethod();
  bool val1null = mcnull?.boolMethod();

  bool val2 = mc != null && mc.boolMethod();
  bool val2null = mcnull != null && mcnull.boolMethod();
}
Run Code Online (Sandbox Code Playgroud)

特别是在if语句中使用时,我认为第一个版本更具可读性:

if (mc?.boolMethod())...
Run Code Online (Sandbox Code Playgroud)

if (mc != null && mc.boolMethod())...
Run Code Online (Sandbox Code Playgroud)

但是IntelliJ给了我提示'?。'的值。运算符可以为“ null”,不适合作为局部运算符的操作数。(null_aware_in_logical_operator)。好的-这是正确的,因为当变量为null时,我将null用作布尔值。但这对我来说还可以,我尽量避免抑制警告。

建议的方法是什么?还有其他想法吗?

Gün*_*uer 5

我认为一个常见的模式是

  bool val1 = (mc?.boolMethod() ?? false);
Run Code Online (Sandbox Code Playgroud)

这里不需要括号,但是如果将这样的表达式嵌入到更复杂的表达式中,则它们通常是获得预期行为所必需的,因为它们的优先级较低。 ??