0

在 Dart 的集合中使用?和使用时有什么区别?!


说,我有:

var list = [1, 2];

现在,我可以使用

print(list?[0]); // prints 1

或者

print(list![0]); // also prints 1

他们似乎都做同样的工作,那么有什么区别呢?

4

1 回答 1

1

他们两个似乎都在做同样的工作,因为你list的类型是List<int>(不可为空的)而不是List<int>?(可空的)。如果您的列表是可为空的类型,例如:

List<int>? list;

你会看到区别的。


使用?(Null 感知运算符)

使用它是安全的,?因为如果listnulllist?[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]); 
于 2020-08-15T02:13:28.743 回答