echo getFoo_Bar | sed 's/[Bb]/\L&/g'
Будет ли:
results.AddRange(objects.Select(obj => ApplyFormula(obj)));
делать?
или (проще)
var results = objects.Select(obj => ApplyFormula(obj)).ToList();
Я думаю, что метод расширения 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 ()
.
Если метод MyMethod
, который вы хотите применить, возвращает объект типа T
, тогда вы можете получить IEnumerable
результата метода через:
var results = objects.Select(o => o.MyMethod());
Если метод MyMethod
, который вы хотите применить, имеет тип возврата void
, вы можете применить метод через:
objects.ForEach(o => o.MyMethod());
Это предполагает, что объекты
имеют универсальный тип Список <>
. Если все, что у вас есть, это IEnumerable <>
Компилятор C # отображает выбор LINQ на метод расширения .Select, определенный в IEnumerable (или IQueryable, который мы здесь проигнорируем). На самом деле, этот метод .Select - это именно та функция проекции, которая вам нужна.
Л.Бушкин прав, но вы также можете использовать синтаксис LINQ ...
var query = from o in objects
select o.MyMethod();
http://www.hookedonlinq.com/UpdateOperator.ashx имеет расширенный метод обновления, который вы можете использовать. Или вы можете использовать оператор select, опубликованный другими.