首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在.NET框架中,lambdas和委托有什么不同?

在.NET框架中,lambdas和委托有什么不同?
EN

Stack Overflow用户
提问于 2008-09-16 14:55:06
回答 12查看 32.8K关注 0票数 97

我经常被问到这个问题,我想我应该征求一些关于如何最好地描述差异的意见。

EN

回答 12

Stack Overflow用户

发布于 2008-09-16 15:16:59

一个不同之处在于,匿名委托可以省略参数,而lambda必须与确切的签名匹配。给定:

代码语言:javascript
复制
public delegate string TestDelegate(int i);

public void Test(TestDelegate d)
{}

您可以通过以下四种方式调用它(请注意,第二行有一个没有任何参数的匿名委托):

代码语言:javascript
复制
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表达式或没有参数的方法。这些是不允许的:

代码语言:javascript
复制
Test(() => String.Empty); //Not allowed, lambda must match signature
Test(D2); //Not allowed, method must match signature

private string D2()
{
    return String.Empty;
}
票数 22
EN

Stack Overflow用户

发布于 2008-09-16 14:57:36

委托相当于函数指针/方法指针/回调(随意选择),而lambda是非常简单的匿名函数。至少我是这么跟别人说的。

票数 14
EN

Stack Overflow用户

发布于 2008-09-16 14:57:09

我对此没有太多的经验,但我会这样描述它:委托是任何函数的包装器,而lambda表达式本身就是一个匿名函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档