0

Dart のコレクションで使用される場合?との違いは何ですか?!


言う、私は持っている:

var list = [1, 2];

今、私はどちらかを使用することができます

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

また

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

どちらも同じように見えますが、違いは何ですか?

4

1 に答える 1

1

listあなたのタイプは(nullList<int>不可)であり、 (null可能)ではないため、どちらも同じ仕事をしているようですList<int>?。リストが次のような null 許容型だった場合:

List<int>? list;

違いがわかります。


使用?(null 認識演算子)

isの場合でも、エラーをスローするのではなく出力する?ため、安全に使用できます。listnulllist?[0]null

print(list?[0]); // Safe

または??、デフォルト値を提供するために使用することもできます。

print(list?[0] ?? -1); // Safe. Providing -1 as default value in case the list is null 

使用!(Bang オペレーター)

ただし、そうではない!ことを明示的に言っており、null 許容から非 null 許容にダウンキャストしているため、ランタイム エラーがスローされます。listnull

print(list![0]); // Not safe. May cause runtime error if list is null

これは、

print((list as List)[0]); 
于 2020-08-15T02:13:28.743 に答える