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