だから私はこの状況に頻繁に遭遇しDo.Something(...)
ます...そこでは次のようにnullコレクションを返します:
int[] returnArray = Do.Something(...);
次に、このコレクションを次のように使用してみます。
foreach (int i in returnArray)
{
// do some more stuff
}
私はただ知りたいのですが、なぜforeachループがnullコレクションで動作しないのですか?反復が0の場合、nullコレクションで実行されるのは理にかなっているようです。代わりにがスローされますNullReferenceException
。なぜこれが起こり得るのか誰でも知っていますか?
APIが何を返すのかが明確でないAPIを使用しているので、これは面倒ですif (someCollection != null)
。
編集:をforeach
使用して説明していただきありがとうございますGetEnumerator
。取得する列挙子がない場合、foreachは失敗します。言語/ランタイムが列挙子を取得する前にnullチェックを実行できない、または実行できない理由を私は尋ねていると思います。動作はまだ明確に定義されているように思えます。
null
値を指定されたときに何も実行しないことが明確に定義されていると思います。foreach
ループやその他のステートメントについてもこれを提案していますか?