-
-
Save ferventcoder/1120638 to your computer and use it in GitHub Desktop.
foreach (var item in items ?? new List<string>()) | |
{ | |
//do something | |
} |
public static class EnumerableExtensions | |
{ | |
public static IEnumerable<T> OrEmptyListIfNull<T>(this IEnumerable<T> source) | |
{ | |
return source ?? Enumerable.Empty<T>(); | |
} | |
} | |
foreach(var item in items.OrEmptyListIfNull()) | |
{ | |
//do something | |
} |
I typically do all this as an assignment outside the looping construct - extensions are nice but they can be confusing.
items = items ?? new List();
or
var list = items ?? new List();
is cleaner IMO
@jglozano: I started down that path and thought, I could shortcut this at the point of the loop...
Late entry by @damianh (randompunter on twitter) - https://gist.github.com/1120821
http://twitter.com/randompunter/status/98457825998684160
"@ferventcoder in a similar vein https://gist.github.com/1120821"
Good stuff. The name of the extension is a little more clear.
I settled on the extension method named OrEmptyListIfNull. This directly borrows from @cammerman's https://gist.github.com/1120655 ;)
as in
foreach(var item in items.OrEmptyListIfNull())
{
//do something
}
I posted the code back at the top of this gist.
This feels like community design... :D
I agree with @chrisortman.
I much prefer linqish extension methods over the foreach block as it wraps up ceremony in a more declarative syntax.
Though AFAIK the following code
will throw a NullReference exception if items is null, so you'd be safer to write:
or, as @stevehorn suggested,
or even, to hide this ceremony further, wrap .ForEach(...) in your own extension method
I've also seen similar useful overloads like
Come to think of it, are you sure that foreach will throw if the source is null? I know if the source is empty it simply short-circuts....