用速记处理列表中的每个项目会很棒,在这种情况下是保存。
SO intead of
var people = MakePeople();
foreach (var person in people)
{
session.Save(person);
}
我们可以使用
var cards = MakeCards(deck);
cards.Select(session.Save);
但是,这不起作用..建议?聚合
答案 0 :(得分:2)
Select
使用延迟评估,因此无效。
您正在寻找List<T>.ForEach
或其non-existent LINQ version。
答案 1 :(得分:1)
看起来Save()
没有返回值。要将方法与Select()
一起使用,它需要具有返回值。
一般来说,将LINQ与具有副作用的方法(如Save()
)一起使用是个坏主意。当有副作用时,第一种方法肯定是首选。如果MakePeople返回一个具体的List,你也可以尝试:
var people = MakePeople();
people.ForEach((p) => { session.Save(p); });
答案 2 :(得分:0)
答案 3 :(得分:0)
你试图创建一张卡片 - &gt;无效映射。选择是为了将一个项目转换为另一个类型,因此您可以将卡片集合转换为例如一个cardnumber集合。 正如其他人已经提到的那样,List有一个ForEach超载。但是C#语言设计者的一般主题(见Eric Lipperts blog)是不提供这样的扩展方法,因为foreach更清晰。它不能保证你输入的数量太多,所以这里的好处是最小的。 对于引用,您可以使用3行代码创建一个扩展方法。
public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
{ // argument null checking omitted
foreach(T item in sequence) action(item);
}
Nitpick Corner:我的意思和写作(至少有一个影响力)C#语言设计师不想引入这种扩展方法。一旦它存在于BCL中,它就可以被任何.NET语言使用。
此致, Alois Kraus