繁体   English   中英

Dart null 安全。? 与?-

[英]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运算符( ! )使Dartnullable表达式视为不可空,如果您确定它不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM