我想看看一个变量是否不属于某种类型。我知道我可以做到if(picture is XFile),但这两者似乎都起到相反的作用:
if(picture !is XFile)
if(picture is! XFile)
有什么不同?
x !is T不是你想的那样。如果你运行dart format你的代码,你会发现它实际上是x! is T;也就是说,它使用后修复 !运算符,该运算符断言xis not null,然后执行正常is T检查(因此产生与您预期相反的结果)。如果x静态已知不可为空,dart analyze则应生成有关不必要地使用空断言运算符的警告。
也许您的意思是比较x is! T和!(x is T)。这些表达式之间没有逻辑差异。有一个 linter 规则建议is!应该首选,但它没有提供任何解释原因。我相信这是因为is!表面上读起来更好(“不是”)并且比否定括号表达式更简单。(然而,这种立场早于空安全,并且is!现在可能会因为后修复!运算符的存在而更加令人困惑。)
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |