我经常被问到这个问题,我想我应该征求一些关于如何最好地描述差异的意见。
发布于 2008-09-16 15:16:59
一个不同之处在于,匿名委托可以省略参数,而lambda必须与确切的签名匹配。给定:
public delegate string TestDelegate(int i);
public void Test(TestDelegate d)
{}
您可以通过以下四种方式调用它(请注意,第二行有一个没有任何参数的匿名委托):
Test(delegate(int i) { return String.Empty; });
Test(delegate { return String.Empty; });
Test(i => String.Empty);
Test(D);
private string D(int i)
{
return String.Empty;
}
不能传入没有参数的lambda表达式或没有参数的方法。这些是不允许的:
Test(() => String.Empty); //Not allowed, lambda must match signature
Test(D2); //Not allowed, method must match signature
private string D2()
{
return String.Empty;
}
发布于 2008-09-16 14:57:36
委托相当于函数指针/方法指针/回调(随意选择),而lambda是非常简单的匿名函数。至少我是这么跟别人说的。
发布于 2008-09-16 14:57:09
我对此没有太多的经验,但我会这样描述它:委托是任何函数的包装器,而lambda表达式本身就是一个匿名函数。
https://stackoverflow.com/questions/73227
复制相似问题