Enumerable.Append and Enumerable.Prepend extension methods
Another gem I found on StackOverflow today (I’ve been spending a lot of time there these last couple of days..), this time in the form of a question on how to append or prepend a single value to an IEnumerable<T>.
Greg provided an elegant solution to this particular problem, and here’s his answer:
[code lang=”csharp”]
public static IEnumerable<T> Append<T>(this IEnumerable<T> source, T item)
{
foreach (T i in source)
yield return i;
yield return item;
}
public static IEnumerable<T> Prepend<T>(this IEnumerable<T> source, T item)
{
yield return item;
foreach (T i in source)
yield return i;
}
[/code]
Which you can use like this:
[code lang=”csharp”]
var all = GetHeaders().Append(GetData());
[/code]
As others have stated, what’s so nice about this solution is that it does not mutate the original collection, instead it generates a new IEnumerbale<T>.