Stefan Steinegger Stefan Steinegger - 28 days ago 12
C# Question

Linq style "For Each"


Possible Duplicate:

Linq equivalent of foreach for IEnumerable


Is there any LINQ style syntax for "For each" operations?

For instance, add values based on one collection to another, already existing one:

IEnumerable<int> someValues = new List<int>() { 1, 2, 3 };

IList<int> list = new List<int>();

someValues.ForEach(x => list.Add(x + 1));


Instead of

foreach(int value in someValues)
{
list.Add(value + 1);
}

Answer

Using the ToList() extension method is your best option:

someValues.ToList().ForEach(x => list.Add(x + 1));

There is no extension method in the BCL that implements ForEach directly.


Although there's no extension method in the BCL that does this, there is still an option in the System namespace... if you add Reactive Extensions to your project:

using System.Reactive.Linq;

someValues.ToObservable().Subscribe(x => list.Add(x + 1));

This has the same end result as the above use of ToList, but is (in theory) more efficient, because it streams the values directly to the delegate.

Comments