在 Dart 的集合中使用?
和使用时有什么区别?!
说,我有:
var list = [1, 2];
现在,我可以使用
print(list?[0]); // prints 1
或者
print(list![0]); // also prints 1
他们似乎都做同样的工作,那么有什么区别呢?
在 Dart 的集合中使用?
和使用时有什么区别?!
说,我有:
var list = [1, 2];
现在,我可以使用
print(list?[0]); // prints 1
或者
print(list![0]); // also prints 1
他们似乎都做同样的工作,那么有什么区别呢?
他们两个似乎都在做同样的工作,因为你list
的类型是List<int>
(不可为空的)而不是List<int>?
(可空的)。如果您的列表是可为空的类型,例如:
List<int>? list;
你会看到区别的。
使用?
(Null 感知运算符)
使用它是安全的,?
因为如果list
是null
,list?[0]
仍然会打印null
而不是抛出错误。
print(list?[0]); // Safe
或者你也可以??
用来提供一个默认值。
print(list?[0] ?? -1); // Safe. Providing -1 as default value in case the list is null
使用!
(Bang 运算符)
但是,!
会引发运行时错误,因为您明确表示您list
不是null
并且您将其从可空转换为不可空:
print(list![0]); // Not safe. May cause runtime error if list is null
这相当于
print((list as List)[0]);