[英]Dart null safety !. vs ?-
到底有什么区别
String id = folderInfo!.first.id; //this works
和
String id = folderInfo?.first.id; //this is an error
我知道?。 当值 object 为 null 时,返回 null 但这是什么? 返回?
断言运算符 (!)
使用 null assertion
运算符( ! )使Dart将nullable
表达式视为不可空,如果您确定它不是null
。
换句话说..如果value
null 会引发error
,并且会破坏您的 function 并且您知道吗? 将返回 null 而不会中断。
?.
被称为条件成员访问
最左边的操作数可以是 null; 示例: foo?.bar 从表达式 foo 中选择属性 bar ,除非 foo 是 null(在这种情况下 foo?.bar 的值为 null)
在您的情况下, String id
意味着id
不能具有null
值。 但是使用?.
可以返回null
这就是它显示错误的原因。
..
使用如果您知道表达式永远不会计算为null
。
例如,int 类型的变量? 可能是 integer,也可能是 null。 如果您知道表达式永远不会计算为 null 但 Dart 不同意,您可以添加!
断言它不是 null (如果是则抛出异常)。
更多和参考: null-safety和 操作符的重要概念。
!
如果变量是null
则抛出错误。 如果可能,您应该尽量避免这种情况。
如果您确定具有可为空类型的表达式不是 null,则可以使用 null 断言运算符 (.) 使 Dart 之后将其视为非空表达式。 您告诉 Dart 该值不会为空,并且将其分配给不可为空的变量是安全的。
在您的第一种情况下,您定义 id 不可为空,但是当您设置可空值时会抛出错误。
String id = folderInfo?.first.id;
在第二种情况下,当您使用断言运算符 (,) 时。 它实际上告诉编译器它必须是不可为空的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.