You are looking for Enumerable.Empty<T>()
.
In other news the Java empty list sucks because the List interface exposes methods for adding elements to the list which throw exceptions.
Enumerable.Empty<T>()
is exactly that.
I think you're looking for Enumerable.Empty<T>()
.
Empty list singleton doesn't make that much sense, because lists are often mutable.
In your original example you use an empty array to provide an empty enumerable. While using Enumerable.Empty<T>()
is perfectly right, there might other cases: if you have to use an array (or the IList<T>
interface), you can use the method
System.Array.Empty<T>()
which helps you to avoid unnecessary allocations.
Notes / References:
I think adding an extension method is a clean alternative thanks to their ability to handle nulls - something like:
public static IEnumerable<T> EmptyIfNull<T>(this IEnumerable<T> list)
{
return list ?? Enumerable.Empty<T>();
}
foreach(var x in xs.EmptyIfNull())
{
...
}
Microsoft implemented `Any()' like this (source)
public static bool Any<TSource>(this IEnumerable<TSource> source)
{
if (source == null) throw new ArgumentNullException("source");
using (IEnumerator<TSource> e = source.GetEnumerator())
{
if (e.MoveNext()) return true;
}
return false;
}
If you want to save a call on the call stack, instead of writing an extension method that calls !Any()
, just rewrite make these three changes:
public static bool IsEmpty<TSource>(this IEnumerable<TSource> source) //first change (name)
{
if (source == null) throw new ArgumentNullException("source");
using (IEnumerator<TSource> e = source.GetEnumerator())
{
if (e.MoveNext()) return false; //second change
}
return true; //third change
}
Using Enumerable.Empty<T>()
with lists has a drawback. If you hand Enumerable.Empty<T>
into the list constructor then an array of size 4 is allocated. But if you hand an empty Collection
into the list constructor then no allocation occurs. So if you use this solution throughout your code then most likely one of the IEnumerable
s will be used to construct a list, resulting in unnecessary allocations.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With