在 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]);