2012-03-05 121 views
3

更换委托我试图取代在与lambda表达式语句:与lambda表达式

List<ABC> l = new List<ABC>(); 
    l.Find(delegate(ABC a) { return a.A == 4; }); 

我试图

l.Find((ABC a)=>a.A==4;); 

但是这是显然是不正确。 感谢

回答

6

首先,请注意,它仍是一个委托 - 简单:相反,它使用lambda语法而非匿名方法语法(这基本上意味着尽管如此)。

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

l.Find((ABC a) => a.A == 4); 

或者更简单地说:

l.Find(a => a.A == 4); 

(括号内是唯一的必要如果你有多个参数,明确的类型对于消歧是有用的)

4

试试这个

l.Find((a) => a.A == 4); 
+0

谢谢,我不知道它是什么类型的,即使它是类的领域。 – user970696 2012-03-05 08:17:28

2

为什么你不以简单的方式使用它,我认为没有必要写(ABC a)

l.Find(a => a.A == 4); 

本声明l.Find((a) => a.A == 4);可以写成你的发言l.Find(delegate(ABC a) { return a.A == 4; });。正如你所看到的,谓词可以用匿名方法(委托)来代替。

(.NET 2.0)

fooList.Find(delegate (Foo f) { return f.Equals(fooTarget); }); 

或(更高版本)

fooList.Find(f => f.Equals(fooTarget)); 
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); 

(你可以使用与其他快捷键无关的“单一表达”部分。)