I am trying to do something like this:
image.Layers
which returns an IEnumerable<Layer>
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.
What you can do is use the Add extension method to create a new IEnumerable<T> with the added value. var items = new string[]{"foo"}; var temp = items; items = items. Add("bar");
All LINQ methods are extension methods to the IEnumerable<T> interface. That means that you can call any LINQ method on any object that implements IEnumerable<T> . You can even create your own classes that implement IEnumerable<T> , and those classes will instantly "inherit" all LINQ functionality!
Unfortunately, List<T>. AddRange isn't defined in any interface.
C# Single() Method CsharpProgrammingServer Side Programming. Get only a single element of a sequence using the Single() method. Let's say we have a string array with only one element. string[] str = { "one" }; Now, get the element.
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
andPrepend
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With