C#: Toute prestation de Liste<T>.ForEach(...) sur la plaine de boucle foreach?

Je me demandais pourquoi List<T>.ForEach(Action<T>) existe.

Est-il un avantage ou la différence en faisant :

elements.ForEach(delegate(Element element){ element.DoSomething(); });

sur

foreach(Element element in elements) { element.DoSomething();}

?