Enumerable.Append and Enumerable.Prepend extension methods

Yan Cui
theburningmonk.com
Published in
1 min readAug 4, 2010

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>.

--

--

Yan Cui
theburningmonk.com

AWS Serverless Hero. Follow me to learn practical tips and best practices for AWS and Serverless.