新しい C# 6.0 の null 条件演算子は、より簡潔で複雑でないコードを記述するための便利な手段です。customers
顧客の配列があると仮定すると、これを使用して nullの場合、長さの代わりに null を取得できます( MSDNの例):
int? length = customers?.Length;
同様に、次のように顧客の代わりに null を取得できます。
Customer first = customers?[0];
より複雑な式でcustomers
は、is null、最初の顧客が null、または最初の顧客のOrders
オブジェクトが nullの場合に null が返されます。
int? count = customers?[0]?.Orders?.Count();
しかし、null 条件演算子が対処していないように見える、存在しない顧客の興味深いケースがあります。上記で、nullの顧客、つまりcustomers
配列内のエントリが null の場合がカバーされることを見てきました。しかし、それは存在しない顧客とはまったく異なります。たとえば5
、3 要素の配列で顧客を探したりn
、0 要素のリストで顧客を探したりします。(同じ議論が辞書検索にも当てはまることに注意してください。)
null 条件演算子は、NullReferenceException の影響を無効にすることのみに重点を置いているように思えます。IndexOutOfRangeException または KeyNotFoundException は単独で公開されており、隅に追い詰められており、自力で対処する必要があります。null条件演算子の精神で、それらのケースも処理できるはずです...それが私の質問につながります。
私はそれを逃しましたか?null 条件は、この式を真にカバーするエレガントな方法を提供しますか...
customers?[0]?.Orders?.Count();
...ゼロ番目の要素がない場合は?