Вопрос

Если я кому-то объясняю следующую функцию ForEach, правильно ли будет сказать, что # 2 - это "LINQ для каждого подхода"или это просто..."List<T> способ расширения" это официально не связано с LINQ?

var youngCustomers = from c in customers
                     where c.Age < 30
                     select c;

//1. traditional foreach approach
foreach (var c in youngCustomers)
{
    Console.WriteLine(c.Display());
}

//2. LINQ foreach approach?
youngCustomers.ToList().ForEach(c => Console.WriteLine(c.Display()));
Это было полезно?

Решение

Это нормальный метод генеракодицетагкода хотя люди часто предоставляют своиСобственные методы расширения для других генеракодицетагкодов. linq не предоставляет расширение FOREACH Из-за его дизайна целей функциональности / работы с неизменными типами FOREAFEAL является по своей природой побочный эффект / императив.

Другие советы

Это не имеет ничего общего с LINQ, и это не метод расширения.

ForEach является простым методом экземпляра на List<T> класс.

(И если бы вы хотели быть действительно придирчивым, то ForEach вообще не является частью языка C#:это часть библиотеки базовых классов .NET.)

Это не метод расширения List<T>, это обычный метод List<T>.

Так что это не имеет никакого отношения к LINQ.Если бы это было так, то различие между "официально связанным с LINQ" и "официально не связанным с LINQ" практически не очень полезно.LINQ - это просто набор связанных методов расширения (часто на IEnumerable<T>).Редко есть какой-либо смысл отличать его от других методов расширения на IEnumerable<T>.Лучшим отличием было бы то, что они проживают в одном из System.Linq или System.Something.Linq пространства имен.

Это не linq.Один из аспектов дизайна LINQ заключается в том, что стандартные методы LINQ не имеют побочных эффектов.Метод FOREACH нарушит это.

Eric Lippert имеет блог статью все об этом:

http:// блоги.msdn.com / b / ericlippert / archive / 2009/05/18 / foreach-vs-foreach.aspx

youngCustomers.ToList().ForEach(c => Console.WriteLine(c.Display())); 

Давайте разберем это по пунктам:

  • ToList это призыв к System.Linq.Enumerable.ToList() введено в .net framework 3.5
  • ForEach это призыв к System.Collections.Generic.List<T>.ForEach введено в .net framework 2.0
  • c => это синтаксис лямбда-выражения, введенный в c# 3.0.

Если вы посмотрите документацию для List<T>.ForEach, вы можете увидеть старый синтаксис делегата, который требовался тогда для его вызова.

Боковой эффект Foreach будет (IS), предусмотренный в расширении Visual Studio 2010's Linq.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top