我有一个客户类型的IList。我需要遍历它并返回一个匹配某些条件的元素。我想比foreach使用“更聪明”的方式,所以我尝试了Single方法,但是我不确定为什么这样做,如果它可以以不同的方式完成(我不是那么先进):
private client GetClientByID(short ID)
{
return this.ListOfClient.Single(c => c.ID == ID);
}
我不明白lambda表达式的使用..我尝试了一个匿名方法但是无法正确编写它。 感谢
答案 0 :(得分:1)
您的代码是正确的,这个lambda表达式基本上是一个返回bool的方法(在这种特定情况下)。因此,想象一下,对于ListOfClient中的每个项目,它将尝试执行该方法,如果它返回true,则它将返回该项目。
您需要注意使用Single,如果列表中有0个或多个匹配项,则会失败。
如果您确定只有1个项目则可以,如果没有,您可以使用以下某个项目:
List.SingleOrDefault() //returns null if there are 0 items, fails if there are more than 1
List.First() //fails if there are 0 items
List.FirstOrDefault() //never fails, returns null if there are 0 items
答案 1 :(得分:0)
来自MSDN
lambda表达式是一个匿名函数,可以包含表达式和语句,可用于创建委托或表达式树类型。
这意味着您的代码等同于
private client GetClientByID(short ID)
{
return this.ListOfClient.Single(delegate(Client c) { return c.ID == ID; });
}
Single是一个linq扩展方法,可以确定为Enumerable.Single Method (IEnumerable, Func) 注意第二个参数
Func<TSource, bool> predicate
谓词代表。表示定义一组条件并确定指定对象是否符合条件的方法。
这意味着它将检查集合中每个元素的标准return c.ID == ID;
,并返回满足要求的元素。
PS小心Single
方法。我希望根据任务使用SingleOrDefault
或FirstOrDefault
。