If you had a loop that aggregated together different sets into a result set you can use it to initialize your result set variable and loop/accumulate. For example:
IEnumerable<string> results = Enumerable.Empty<string>();
for(....)
{
IEnumerable<string> subset = GetSomeSubset(...);
results = results.Union(subset);
}
Without Empty you'd have to have written a null check into your loop logic:
IEnumerable<string> results = null;
for(....)
{
IEnumerable<string> subset = GetSomeSubset(...);
if(results == null)
{
results = subset;
}
else
{
results = results.Union(subset);
}
}
It doesn't just have to be a loop scenario and it doesn't have to be Union (could be any aggregate function), but that's one of the more common examples.