Используя Linq для выполнения метода на наборе объектов?

echo getFoo_Bar | sed 's/[Bb]/\L&/g'
14
задан Shaul says I Support Monica 23 June 2009 в 12:34
поделиться

5 ответов

Будет ли:

results.AddRange(objects.Select(obj => ApplyFormula(obj)));

делать?

или (проще)

var results = objects.Select(obj => ApplyFormula(obj)).ToList();
18
ответ дан 1 December 2019 в 10:19
поделиться

Я думаю, что метод расширения Select () может делать то, что вы ищете:

objects.Select( obj => obj.MyMethod() ).ToList(); // produces List<Result> 

objects.Select( obj => ApplyFormula(obj) ).ToList(); // produces List<int>

То же самое для последнего случая:

objects.Select( obj => new WrapperClass( obj ) ).ToList();

Если у вас есть void , который вы хотите вызвать, вот трюк, который вы можете использовать с IEnumerable, у которого нет расширения ForEach (), для создания аналогичного поведения без особых усилий.

objects.Select( obj => { obj.SomeVoidMethod(); false; } ).Count();

Select () создаст последовательность значений [false] после вызова SomeVoidMethod () для каждого [obj] в последовательности объектов. Поскольку Select () использует отложенное выполнение, мы вызываем расширение Count () для принудительной оценки каждого элемента в последовательности. Он отлично работает, когда вам нужно что-то вроде поведения ForEach () .

4
ответ дан 1 December 2019 в 10:19
поделиться

Если метод MyMethod , который вы хотите применить, возвращает объект типа T , тогда вы можете получить IEnumerable результата метода через:

var results = objects.Select(o => o.MyMethod());

Если метод MyMethod , который вы хотите применить, имеет тип возврата void , вы можете применить метод через:

objects.ForEach(o => o.MyMethod());

Это предполагает, что объекты имеют универсальный тип Список <> . Если все, что у вас есть, это IEnumerable <>

2
ответ дан 1 December 2019 в 10:19
поделиться

Компилятор C # отображает выбор LINQ на метод расширения .Select, определенный в IEnumerable (или IQueryable, который мы здесь проигнорируем). На самом деле, этот метод .Select - это именно та функция проекции, которая вам нужна.

Л.Бушкин прав, но вы также можете использовать синтаксис LINQ ...

var query = from o in objects
   select o.MyMethod();
1
ответ дан 1 December 2019 в 10:19
поделиться

http://www.hookedonlinq.com/UpdateOperator.ashx имеет расширенный метод обновления, который вы можете использовать. Или вы можете использовать оператор select, опубликованный другими.

0
ответ дан 1 December 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: