Why is there no ForEach extension method on IEnumerable?

.net, c#, extension-methods, vb.net

Solution

There is already a `foreach` statement included in the language that does the job most of the time.

I'd hate to see the following:

list.ForEach( item =>
{
    item.DoSomething();
} );

Instead of:

foreach(Item item in list)
{
     item.DoSomething();
}

The latter is clearer and easier to read in most situations, although maybe a bit longer to type.

However, I must admit I changed my stance on that issue; a `ForEach()` extension method would indeed be useful in some situations.

Here are the major differences between the statement and the method:

- Type checking: foreach is done at runtime, `ForEach()` is at compile time (Big Plus!)

- The syntax to call a delegate is indeed much simpler: objects.ForEach(DoSomething);

- ForEach() could be chained: although evilness/usefulness of such a feature is open to discussion.

Those are all great points made by many people here and I can see why people are missing the function. I wouldn't mind Microsoft adding a standard ForEach method in the next framework iteration.

Problem

Inspired by another question asking about the missing `Zip` function: Why is there no `ForEach` extension method on the `IEnumerable` interface? Or anywhere? The only class that gets a `ForEach` method is `List<>`. Is there a reason why it's missing, maybe performance?

Original source

Related problems