更换委托我试图取代在与lambda表达式语句:与lambda表达式
List<ABC> l = new List<ABC>();
l.Find(delegate(ABC a) { return a.A == 4; });
我试图
l.Find((ABC a)=>a.A==4;);
但是这是显然是不正确。 感谢
更换委托我试图取代在与lambda表达式语句:与lambda表达式
List<ABC> l = new List<ABC>();
l.Find(delegate(ABC a) { return a.A == 4; });
我试图
l.Find((ABC a)=>a.A==4;);
但是这是显然是不正确。 感谢
首先,请注意,它仍是一个委托 - 简单:相反,它使用lambda语法而非匿名方法语法(这基本上意味着尽管如此)。
至于如何解决它:只要带走;
:
l.Find((ABC a) => a.A == 4);
或者更简单地说:
l.Find(a => a.A == 4);
(括号内是唯一的必要如果你有多个参数,明确的类型对于消歧是有用的)
试试这个
l.Find((a) => a.A == 4);
为什么你不以简单的方式使用它,我认为没有必要写(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));
只要是完整的,所有的这些将是有效的:
// 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);
(你可以使用与其他快捷键无关的“单一表达”部分。)
谢谢,我不知道它是什么类型的,即使它是类的领域。 – user970696 2012-03-05 08:17:28