46 votes

C'est la Liste<T>.Méthode ForEach() disparu?

J'ai commencé à barboter dans Windows 8 metro récemment, et a constaté que l'un de mes vieux copains semble avoir disparu.

J'ai tendance à utiliser l' .ForEach() méthode plus que je les traditionnels foreach() construire des, et j'ai réalisé assez vite que cette méthode n'est pas disponible. Par exemple, ce code ne compile pas sous une appli metro:

var list = new List<string>();

list.ForEach(System.Diagnostics.Debug.WriteLine);

J'ai cherché pour voir si je pouvais trouver toutes les discussions de cela, mais n'a pas pu. Suis-je tout simplement d'être obtus, ou est-il réellement disparu?

43voto

BoltClock Points 249668

C'est en effet passé:

List<T>.ForEach a été supprimé dans le Metro style apps. Tandis que la méthode semble simple, il a un certain nombre de problèmes potentiels lorsque la liste s'muté par la méthode adoptée pour ForEach. Au lieu de cela, il est recommandé que vous simplement d'utiliser une boucle foreach.


Wes Hagard | .NET Framework Équipe (BCL) | http://blogs.msdn.com/b/bclteam/

Très étrangement, cependant, il fait une apparition dans la documentation, à qui nulle part n'est-il affirmer que cette méthode n'est pas pris en charge dans .NET pour les applications du Windows Store (anciennement .NET pour les applications Metro-style). C'est peut-être juste un oubli sur une partie de l'équipe de documentation.

19voto

Joel Coehoorn Points 190579

Pour avoir une idée de pourquoi il ne peut plus être compris, lisez ce post, par quelqu'un qui travaille sur l'équipe C# de Microsoft: http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx

En gros, c'est une philosophie. Le "LINQ" caractéristiques sont très inspirée par le paradigme de la programmation fonctionnelle, et le ForEach extension de mouches sur le visage... il encourage les pauvres style fonctionnel.

16voto

yamen Points 9976

Une alternative consiste à définir vous-même bien sûr:

public static IEnumerable<T> ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
    foreach(T item in enumeration)
    {
        action(item);
        yield return item;
    }
}

Crédit: LINQ équivalent de foreach pour IEnumerable<T>

(Note: pas un doublon)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X