Что касается «встроенного», то нет .ForEach()
; однако я думаю, что .Aggregate()
будет наиболее подходящим вариантом здесь (если вы абсолютно и совершенно хотите встроенную функцию).
lstObjects.Aggregate(anotherList, (targetList, value) =>
{
object MyObject = new object();
MyObject.propertyone = item.property
MyObject.propertytwo = somevalue;
targetList.Add(MyObject);
return targetList;
});
Очевидно, что вы можете просто написать свои собственные методы расширения:
public static IEnumerable<T> Intercept<T>(this IEnumerable<T> values, Action<T> each)
{
foreach (var item in values)
{
each(item);
yield return item;
}
}
public static IEnumerable<T> Intercept<T>(this IEnumerable<T> values, Action<T, int> each)
{
var index = 0;
foreach (var item in values)
{
each(item, index++);
yield return item;
}
}
// ...
a.Intercept(x => { Console.WriteLine(x); }).Count();
Примечание: Причина, по которой я не создаю ForEach, как у всех остальных, заключается в том, что Microsoft не включила его, потому что методы Linq по своей конструкции всегда возвращали значение или список значений.
Специально для вашего вопроса, .Select<T>
добьется цели.
anotherList.AddRange(lstObjects.Select(x => new MyObject()
{
propertyone = x.property,
propertytwo = somevalue
}));