Why does .NET foreach loop throw NullRefException when collection is null?
A foreach
loop calls the GetEnumerator
method.
If the collection is null
, this method call results in a NullReferenceException
.
It is bad practice to return a null
collection; your methods should return an empty collection instead.
Well, the short answer is "because that's the way the compiler designers designed it." Realistically, though, your collection object is null, so there's no way for the compiler to get the enumerator to loop through the collection.
If you really need to do something like this, try the null coalescing operator:
int[] array = null;
foreach (int i in array ?? Enumerable.Empty<int>())
{
System.Console.WriteLine(string.Format("{0}", i));
}