C# 在Ilist中使用Func,为什么使用lambda表达式?

C# 在Ilist中使用Func,为什么使用lambda表达式?,c#,lambda,anonymous-methods,C#,Lambda,Anonymous Methods,我有一个客户端类型的IList。我需要遍历它并返回一个匹配某个条件的元素。我想使用比foreach更“聪明”的方法,所以我尝试了单一的方法,但我不确定这为什么有效,以及是否可以用不同的方法来实现(我没有那么先进): 我不理解lambda表达式的用法..我尝试了匿名方法,但无法正确编写。。 谢谢你的代码是正确的,这个lambda表达式基本上是一个返回bool的方法(在这个特定的例子中)。所以想象一下,对于ListOfClient中的每个项目,它都会尝试执行该方法,如果它返回true,那么它将返回该

我有一个客户端类型的IList。我需要遍历它并返回一个匹配某个条件的元素。我想使用比foreach更“聪明”的方法,所以我尝试了单一的方法,但我不确定这为什么有效,以及是否可以用不同的方法来实现(我没有那么先进):

我不理解lambda表达式的用法..我尝试了匿名方法,但无法正确编写。。
谢谢你的代码是正确的,这个lambda表达式基本上是一个返回bool的方法(在这个特定的例子中)。所以想象一下,对于ListOfClient中的每个项目,它都会尝试执行该方法,如果它返回true,那么它将返回该项目

您需要小心,如果列表中有0个或多个匹配项,则使用Single将失败

如果您确定只有一项,则可以使用,如果没有,则可以使用以下选项之一:

  • List.SingleOrDefault()//如果有0项,则返回null;如果有1项以上,则返回失败
  • List.First()//如果有0项,则失败
  • List.FirstOrDefault()//永不失败,如果有0项,则返回null
来自

lambda表达式是一个匿名函数,可以包含表达式和语句,并可用于创建委托或表达式树类型

这意味着您的代码与

private client GetClientByID(short ID)
{
   return this.ListOfClient.Single(delegate(Client c) { return c.ID == ID; });
}
Single是一种linq扩展方法,可确定为 注意第二个参数

Func<TSource, bool> predicate
Func谓词

谓词委托。表示定义一组条件并确定指定对象是否满足这些标准的方法

这意味着它将检查条件
返回c.ID==ID用于集合的每个元素,并返回满足要求的元素


请注意
单一
方法。我更喜欢使用
SingleOrDefault
FirstOrDefault
,具体取决于任务。

Single
使用
foreach
实现。请注意,
Single
将迭代整个列表,如果没有一个符合条件的
Client
则抛出异常。您可能想使用
First
FirstOrDefault
来代替。谢谢,有没有办法不用lamba来编写它?我对lamba表达式感到困惑,因为它们有更多的含义。帮助人员说有Funcexpected@Petr,当您编写c=>c.ID==ID时,这确实是一个a
Func
,所以这很好。Func的意思是通过参数返回某些内容并获取某些内容的方法。谢谢,不使用lamb表达式也可以编写它吗?如果是的话,你能告诉我怎么做吗?感谢you@Petr,不是在这种情况下,有时会有一个快捷方式,即编写
.Single(MyMethod)
,然后定义
public bool MyMethod(Client c)
。在这种情况下,您需要另一个ID进行比较,因此它不需要apply@Petr更多信息请参见此处
Func<TSource, bool> predicate