This is another blog post filed under “So I can remember this for next time. If it helps you too, great!”
In C#, when looping over a collection where the collection object itself might be null, if the desired behavior is to just loop zero times if the collection object is null, typical code would be:
List<MyType> list = PopulateList(); // Some method that returns a List<MyType>, or null
if (list != null)
{
foreach (MyType mt in list)
{
// Do stuff with mt...
}
}
Using the C# null-coalescing operator ??
, the above code can be condensed to:
List<MyType> list = PopulateList(); // Some method that returns a List<MyType>, or null
foreach (MyType mt in list ?? Enumerable.Empty<MyType>)
{
// Do stuff with mt...
}
In that second example, if list
is non-null, then the foreach
iterates over it as normal. If list
is null, then the foreach
iterates over an empty collection -- so zero iterations are performed.
Thankyou!
ReplyDeleteps I think the example is missing parenthesis..
foreach (MyType mt in list ?? Enumerable.Empty())
or you get this error
Operator '??' cannot be applied to operands of type 'List' and 'method group'
Thank you, yes it's missing parenthesis at the end Enumerable.Empty()
ReplyDelete