Duplication possible:
Pourquoi n’y a-t-il pas une méthode d’extension ForEach sur l’interface IEnumerable?
MODIFIER
Pour référence, voici le billet de blog auquel eric a fait référence dans les commentaires
http://blogs.msdn.com/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx
ORIG
Plus d’une curiosité, je suppose, mais une pour la spécification C # Savants …
Pourquoi la clause ForEach () ne fonctionne pas (ou n’est pas disponible) pour une utilisation sur les jeux de résultats IQueryable / IEnumerable …
Vous devez d’abord convertir vos résultats ToList () ou ToArray () probablement une limitation technique à la façon dont C # itère VEnumerables. Listes … Est-ce que cela a quelque chose à voir avec l’exécution différée des collections IEnumerables / IQuerable. par exemple
var userAgentSsortingngs = uasdc.UserAgentSsortingngs .Where(p => p.DeviceID == 0 && !p.UserAgentSsortingng1.Contains("msie")); //WORKS userAgentSsortingngs.ToList().ForEach(uas => ProcessUserAgentSsortingng(uas)); //WORKS Array.ForEach(userAgentSsortingngs.ToArray(), uas => ProcessUserAgentSsortingng(uas)); //Doesn't WORK userAgentSsortingngs.ForEach(uas => ProcessUserAgentSsortingng(uas));
Quelle coïncidence incroyable, je viens juste d’écrire un article de blog sur cette question même. Il sera publié le 18 mai . Il n’y a aucune raison technique pour laquelle nous (ou vous!) Ne pouvez pas le faire. Les raisons pour lesquelles ne sont pas philosophiques. Voir mon blog la semaine prochaine pour mon argument.
Il est parfaitement possible d’écrire une méthode d’extension ForEach
pour IEnumerable
.
Je ne suis pas sûr de savoir pourquoi il n’est pas inclus en tant que méthode d’extension intégrée:
ForEach
existait déjà sur List
et Array
avant LINQ. foreach
pour itérer la séquence. yield
chaque élément après avoir effectué une action, mais ce comportement n’est pas particulièrement intuitif.) public static void ForEach(this IEnumerable source, Action action) { if (source == null) throw new ArgumentNullException("source"); if (action == null) throw new ArgumentNullException("action"); foreach (T item in source) { action(item); } }