DefaultIfEmpty
This method handles empty collections in a special way. It returns a default value, not an error. It is part of the System.Linq
namespace.
With DefaultIfEmpty
, we replace empty collections with a singleton collection that may be more compatible with other parts of the C# program.
The concept of DefaultIfEmpty
is simple: it replaces an empty collection with a collection of one default value. Remember that the default value of int
is 0.
DefaultIfEmpty
on a List
int
yields a List
with one element, and its value is 0.DefaultIfEmpty
. This will become the value that is used in the singleton collection's value.using System; using System.Collections.Generic; using System.Linq; // Empty list. List<int> list = new List<int>(); var result = list.DefaultIfEmpty(); // One element in collection with default(int) value. foreach (var value in result) { Console.WriteLine(value); } result = list.DefaultIfEmpty(-1); // One element in collection with -1 value. foreach (var value in result) { Console.WriteLine(value); }0 -1
If you call DefaultIfEmpty
on a null
reference, you will get a NullReferenceException
. DefaultIfEmpty
can only be used to handle empty collections.
The version that receives an argument may be more useful. You can use a custom default object that handles the situation where there are no elements present.
null
object (see Introduce Null Object).We saw the behavior of DefaultIfEmpty
. The method changes empty collections to collections with one element. With the optional parameter, you can use custom default objects.