用lambda表达式替换委托

Joh*_*n V 3 c# lambda delegates

我试图用lambda表达式替换以下语句:

 List<ABC> l = new List<ABC>();
  l.Find(delegate(ABC a) { return a.A == 4; });
Run Code Online (Sandbox Code Playgroud)

我试过了

 l.Find((ABC a)=>a.A==4;);
Run Code Online (Sandbox Code Playgroud)

但这显然是不正确的.谢谢

Jon*_*eet 9

为了完整,任何这些都是有效的:

// Fullest version
l.Find((ABC a) => { return a.A==4; });

// Infer the type of the parameter
l.Find((a) => { return a.A==4; });

// Single parameter - can remove the ()
l.Find(a => { return a.A==4; });

// Single expression - can remove braces and semi-colon
l.Find(a => a.A == 4);
Run Code Online (Sandbox Code Playgroud)

(您可以独立于其他快捷方式使用"单个表达式"部分.)


Mar*_*ell 7

首先,请注意它仍然是委托 - 简单地说:它使用lambda语法而不是匿名方法语法(尽管它本质上意味着完全相同).

至于如何解决它:只需带走;:

l.Find((ABC a) => a.A == 4);
Run Code Online (Sandbox Code Playgroud)

或更简单地说:

l.Find(a => a.A == 4);
Run Code Online (Sandbox Code Playgroud)

(仅当您有多个参数时才需要括号;显式类型对于消除歧义很有用)