そのため、私は頻繁にこのような状況に遭遇します...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));
}