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