Почему цикл .NET foreach генерирует исключение NullRefException, когда коллекция пуста? - PullRequest
204 голосов
/ 22 июня 2010

Поэтому я часто сталкиваюсь с такой ситуацией ... где 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 потерпит неудачу.Я предполагаю, что спрашиваю, почему язык / среда выполнения не могут или не будут выполнять нулевую проверку перед захватом перечислителя.Мне кажется, что поведение все еще будет хорошо определено.

Ответы [ 11 ]

0 голосов
/ 02 апреля 2016
SPListItem item;
DataRow dr = datatable.NewRow();

dr["ID"] = (!Object.Equals(item["ID"], null)) ? item["ID"].ToString() : string.Empty;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...