コレクションが null の場合、.NET foreach ループで NullRefException がスローされるのはなぜですか? 質問する

コレクションが null の場合、.NET foreach ループで NullRefException がスローされるのはなぜですか? 質問する

そのため、私は頻繁にこのような状況に遭遇します...Do.Something(...)次のように、null コレクションが返されます。

int[] returnArray = Do.Something(...);

次に、このコレクションを次のように使用してみます。

foreach (int i in returnArray)
{
    // do some more stuff
}

ちょっと気になっているのですが、なぜ foreach ループは null コレクションでは動作しないのでしょうか? null コレクションでは 0 回の反復が実行されるのが論理的に思えますが、代わりに がスローされますNullReferenceException。なぜそうなるのか知っている人はいますか?

これは、返す内容が明確でない API を扱っているため、if (someCollection != null)どこにでも結果が返ってきてしまうという厄介な問題です。

ベストアンサー1

簡単に答えると、「コンパイラの設計者がそのように設計したからです」となります。ただし、現実的には、コレクション オブジェクトは null なので、コンパイラが列挙子を取得してコレクションをループする方法はありません。

本当にこのようなことをする必要がある場合は、null 合体演算子を試してください。

int[] array = null;

foreach (int i in array ?? Enumerable.Empty<int>())
{
   System.Console.WriteLine(string.Format("{0}", i));
}

おすすめ記事