Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is the ForEach method only for lists

From what I can see, the ForEach method is available only for the List class.

Why is that? I can see no reason for ForEach not to be available to any class implementing the IEnumerable/IEnumerator interfaces, and this is a really useful method if you need to perform a small action (1 line is more readable than 1 line + 2 boilerplate foreach syntax...).

Update: I'll clarify my question. There are perfectly valid reasons for including ForEach in sequences. There are perfectly good reasons for not including ForEachin all sequences.

But I cannot understand why would ForEach be included in just some of the sequences.

like image 660
Elazar Leibovich Avatar asked Feb 01 '10 16:02

Elazar Leibovich


People also ask

Does forEach work with lists?

Using the CodeThe ForEach method of the List<T> (not IList<T> ) executes an operation for every object which is stored in the list. Normally it contains code to either read or modify every object which is in the list or to do something with list itself for every object.

What is forEach used for in JS?

forEach is a JavaScript Array method. It is used to execute a function on each item in an array. Lists, sets, and all other list-like objects support the forEach method.

Is forEach mutable JavaScript?

forEach() does not mutate the array on which it is called.


1 Answers

See Eric Lippert's post: "foreach" vs "ForEach"

A number of people have asked me why there is no Microsoft-provided “ForEach” sequence operator extension method. The List class has such a method already of course, but there’s no reason why such a method could not be created as an extension method for all sequences.

...

But we can go a bit deeper here. I am philosophically opposed to providing such a method, for two reasons.

...

The first reason is that doing so violates the functional programming principles that all the other sequence operators are based upon. Clearly the sole purpose of a call to this method is to cause side effects.

...

The second reason is that doing so adds zero new representational power to the language.

...

Well, the VS Languages team does not have any influence on what goes into List. I personally find the "ForEach" method on List philosophically troubling for all the same reasons that I would find an extension method on IEnumerable troubling. (And the VSL team does control that.) The one mitigating factor is that List is clearly designed to be a mutable, not-side-effect-free data structure, so using expressions that mutate it seems slightly less bad. -- Eric

like image 113
Ahmad Mageed Avatar answered Nov 15 '22 19:11

Ahmad Mageed