Często więc spotykam się z tą sytuacją ... gdzie Do.Something(...)zwraca kolekcję zerową, taką jak:
int[] returnArray = Do.Something(...);
Następnie próbuję użyć tej kolekcji w następujący sposób:
foreach (int i in returnArray)
{
// do some more stuff
}
Jestem tylko ciekawy, dlaczego pętla foreach nie może działać w zbiorze zerowym? Wydaje mi się logiczne, że 0 iteracji zostanie wykonanych z zerową kolekcją ... zamiast tego wyrzuca a NullReferenceException. Czy ktoś wie, dlaczego to może być?
Jest to denerwujące, ponieważ pracuję z interfejsami API, które nie są jasne, co dokładnie zwracają, więc kończę na if (someCollection != null)wszystkich ...
Edycja: Dziękuję wszystkim za wyjaśnienie, jakie foreachzastosowania, GetEnumeratora jeśli nie ma żadnego modułu wyliczającego, foreach się nie powiedzie. Wydaje mi się, że pytam, dlaczego język / środowisko wykonawcze nie może wykonać sprawdzenia zerowego przed pobraniem modułu wyliczającego. Wydaje mi się, że zachowanie nadal byłoby dobrze zdefiniowane.
nullwartość. Sugerujesz to dla samych foreachpętli lub innych instrukcji?