【问题标题】:Dart null safety conditional statement?Dart null 安全条件语句?
【发布时间】:2021-08-12 15:00:18
【问题描述】:

所以我有一个类Cache,它有一个方法compare,它返回一个bool

我有一个可以为空的类的实例。

Cache? recent;

我想在 recentnot null 并且 compare 返回 false

时执行一段代码

如果没有零安全性,我会这样做

if(recent!=null && !recent.compare()){
  //code
}

如何在启用 null 安全的情况下做同样的事情?

当我在上面尝试零安全时,我得到了

不能无条件调用“比较”方法,因为接收者可以为“空”。 尝试使调用有条件(使用'?.')或向目标添加空检查('!')

当我在下面尝试时

if(!recent?.compare()){
  //code
}

它给了我

可空表达式不能用作条件。 在将其用作条件之前,请尝试检查该值是否不是“空”。

【问题讨论】:

标签: dart dart-null-safety


【解决方案1】:

您可以通过以下方式解决此问题

  • 使用局部变量(推荐

    var r = recent; // Local variable
    if (r != null && !r.compare()) {
      // ...
    }
    
  • 使用 Bang 运算符 (!)

    if (!recent!.compare()) { 
      // ...
    }
    

【讨论】:

  • 或:if(!(recent?.compare() ?? true))
  • @julemand101 对!你也可以这样做。很难找出所有可能的情况;)但在这种情况下,您需要提供一个默认值,这通常可能不是最好的方法。
  • julemand101 我了解您的方法,无法考虑:(。@CopsOnRoad 我不明白为什么局部变量方法有效,以及什么是 Bang 运算符。感谢您的回答,我会读到这些。
  • @coder_86 由于您使用的是 Dart 空安全,您应该使用我提到的方法之一,甚至是 julemand101 的方法。更详细的答案可以看here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 2022-06-19
  • 2021-10-01
  • 2021-07-07
相关资源
最近更新 更多