私は、次のstring
リストを持っている:??ヌルオブジェクト上のオペレータ
string Email = Emails[0] ?? "";
は、上記のコードが例外をスローします:
を、それはすべての値を持っているかどうか、または空の文字列を返すようにしようとList<string> Emails = new List<string>();
インデックスが範囲外です。負でなく、コレクションのサイズが 未満である必要があります。パラメータ名:インデックス
しかし、単純なif
ステートメントに??
オペレータを変更する、それが正常に動作します:私はここで何をしないのです
if (Emails.Count > 0)
Email = Emails[0];
else
Email = "";
? リストが空の場合、Emails[0]
はnull
ではありませんか?
ありがとうございました。私はそれを変更することをお勧め
電子メール[0]リストの最初の項目にアクセスしようとします - それは例外をスローする理由です – Fabio
ここの問題は2つのコードが同等ではありません。2番目の部分では、配列要素 'Emails [0]'にアクセスしようとする前に、配列境界 'Emails.Count> 0'を正しくチェックしています。最初の部分では、ヌル集合演算子を使用してインデックス0の要素がnullかどうかを正しく確認していますが、配列境界を正しくチェックしていない場合は例外です。 –
リストはnullではないので、 '??'を使用することに意味はありません。最初の項目はnullでもなく、最初の項目はありません。 'FirstOrDefault'や二乗的な明示的なチェックを使うとうまくいくでしょう。しかし、最初の項目について気にするなら、 'Queue <>'のようなより適切なコンテナに切り替える方が良いでしょうか? –