C# 使用iList处理失败的项目

C# 使用iList处理失败的项目,c#,linq,generics,C#,Linq,Generics,最好能用速记来处理列表中的每一项,在本例中是保存 所以我不知道 var people = MakePeople(); foreach (var person in people) { session.Save(person); } 我们可以用 var cards = MakeCards(deck); cards.Select(session.Save); 但是,这是行不通的。。建议?聚合?看起来Save()没有返回值。要将方法与Select()一起使用,它需要有一个返回值 一般来说,

最好能用速记来处理列表中的每一项,在本例中是保存

所以我不知道

var people = MakePeople();
foreach (var person in people)
{
    session.Save(person);
}
我们可以用

var cards = MakeCards(deck);
cards.Select(session.Save);
但是,这是行不通的。。建议?聚合?

看起来
Save()
没有返回值。要将方法与
Select()
一起使用,它需要有一个返回值

一般来说,将LINQ与具有副作用的方法(如
Save()
)一起使用是个坏主意。当有副作用时,第一种方法当然是首选的。如果MakePeople返回具体列表,您还可以尝试:

var people = MakePeople();
people.ForEach((p) => { session.Save(p); }); 
看起来
Save()
没有返回值。要将方法与
Select()
一起使用,它需要有一个返回值

一般来说,将LINQ与具有副作用的方法(如
Save()
)一起使用是个坏主意。当有副作用时,第一种方法当然是首选的。如果MakePeople返回具体列表,您还可以尝试:

var people = MakePeople();
people.ForEach((p) => { session.Save(p); }); 

Select
使用惰性求值,因此它不起作用


您正在查找
列表。ForEach
或其。

Select
使用惰性求值,因此它不起作用


您正在查找
列表。ForEach
或其。

列表有一个。

列表有一个。

您尝试创建一个卡片->无效映射。选择用于将一个项目转换为另一种类型,以便您可以将卡片集合转换为例如cardnumber集合。 正如其他人已经提到的,这个列表有一个ForEach重载。但是C语言设计者(参见)的总主题是不提供这样的扩展方法,因为foreach更清晰。这并不能保证你大量的打字,所以这里的好处很小。 对于reference,您可以创建一个扩展方法,这样就可以使用3行代码实现您想要的功能

public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
{ // argument null checking omitted
  foreach(T item in sequence) action(item);
}
publicstaticvoidforeach(这个IEnumerable序列,动作)
{//省略了参数null检查
foreach(顺序中的T项)动作(项);
}
挑剔的角落:我的意思是(至少有一位有影响力的)C#语言设计师不想引入这种扩展方法。一旦它存在于BCL中,它就可以被任何.NET语言使用

你的,
Alois Kraus

您试图创建一张卡片->无效映射。选择用于将一个项目转换为另一种类型,以便您可以将卡片集合转换为例如cardnumber集合。 正如其他人已经提到的,这个列表有一个ForEach重载。但是C语言设计者(参见)的总主题是不提供这样的扩展方法,因为foreach更清晰。这并不能保证你大量的打字,所以这里的好处很小。 对于reference,您可以创建一个扩展方法,这样就可以使用3行代码实现您想要的功能

public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
{ // argument null checking omitted
  foreach(T item in sequence) action(item);
}
publicstaticvoidforeach(这个IEnumerable序列,动作)
{//省略了参数null检查
foreach(顺序中的T项)动作(项);
}
挑剔的角落:我的意思是(至少有一位有影响力的)C#语言设计师不想引入这种扩展方法。一旦它存在于BCL中,它就可以被任何.NET语言使用

你的,
Alois Kraus

+1类似于
MakePeople().ForEach(p=>session.Save(p))
在那篇文章中有很好的评论,但对于这种情况,它确实很小,我认为拥有.ForEach的理由很简单。。这不像我们使用不带括号的if语句(我讨厌)可以随意创建自己的扩展方法。+1类似于
MakePeople().ForEach(p=>session.Save(p))
在那篇文章中给出了很好的注释,但对于这种情况,它确实很小,我认为使用.ForEach的理由很简单。。这不像我们做的没有括号的if语句(我讨厌)可以随意创建自己的扩展方法。