Поэтому я часто сталкиваюсь с такой ситуацией ... где Do.Something(...)
возвращает нулевую коллекцию, например так:
int[] returnArray = Do.Something(...);
Затем я пытаюсь использовать эту коллекцию следующим образом:
foreach (int i in returnArray)
{
// do some more stuff
}
Мне просто любопытно, почему цикл foreach не может работать с нулевой коллекцией?Мне кажется логичным, что 0 итераций будут выполняться с нулевой коллекцией ... вместо этого он выдает NullReferenceException
.Кто-нибудь знает, почему это может быть?
Это раздражает, так как я работаю с API, которые не совсем точно понимают, что они возвращают, поэтому я получаю if (someCollection != null)
везде ...
Редактировать: Спасибо всем за объяснение, что foreach
использует GetEnumerator
, и если нет перечислителя, который можно получить, foreach потерпит неудачу.Я предполагаю, что спрашиваю, почему язык / среда выполнения не могут или не будут выполнять нулевую проверку перед захватом перечислителя.Мне кажется, что поведение все еще будет хорошо определено.