Is there a Linq method to add a single item to an IEnumerable<T>?

Joan Venge picture Joan Venge · Feb 3, 2011 · Viewed 26.2k times · Source

Basically I am trying to do something like this:

image.Layers

which returns an IEnumerable for all layers except the Parent layer, but in some cases, I just want to do:

image.Layers.With(image.ParentLayer);

because it's only used in a few places compared to the 100s of the usual usage which is satisfied by image.Layers. That's why I don't want to make another property that also returns the Parent layer.

Answer

Ani picture Ani · Feb 3, 2011

One way would be to create a singleton-sequence out of the item (such as an array), and then Concat it onto the original:

image.Layers.Concat(new[] { image.ParentLayer } )

If you're doing this really often, consider writing an Append (or similar) extension-method, such as the one listed here, which would let you do:

image.Layers.Append(image.ParentLayer)

.NET Core Update (per the "best" answer below):

Append and Prepend have now been added to the .NET Standard framework, so you no longer need to write your own. Simply do this:

image.Layers.Append(image.ParentLayer)