首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带委托的Func<>与lambda表达式的区别

带委托的Func<>与lambda表达式的区别
EN

Stack Overflow用户
提问于 2012-09-04 23:59:47
回答 2查看 17.8K关注 0票数 11

在深入了解C#更高级的特性时,我遇到了一些代码,我不太清楚它们的区别。它是关于这两行的:

代码语言:javascript
复制
Func<string, int> giveLength = (text => text.Length);

代码语言:javascript
复制
Func<string, int> giveLength = delegate(string text) { return text.Length; };

这可以以相同的方式使用:

代码语言:javascript
复制
Console.WriteLine(giveLength("A random string."));

所以基本上..这两条线的区别是什么?这些代码行是否编译为相同的CIL?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-05 00:01:41

它们基本上是一样的。在C#规范术语中,它们都是匿名函数。

Lambda表达式通常更简洁,也可以转换为,这对于进程外LINQ至关重要。

如果您不关心,匿名方法允许您删除参数列表。例如:

代码语言:javascript
复制
EventHandler handler = delegate { 
    Console.WriteLine("Sender and args don't matter");
};

考虑到很少需要后一点,匿名方法正在成为现代C#中的一种濒临灭绝的物种。Lambda表达式更为常见。

票数 18
EN

Stack Overflow用户

发布于 2012-09-05 00:01:16

所以基本上..这两条线的区别是什么?这些代码行是否编译为相同的CIL?

只有两种不同的方法可以写出相同的东西。lambda语法更新、更简洁,但它们做的是相同的事情(在本例中)。

请注意,lambdas (=>语法)也可用于形成Expression Lambdas,您可以在其中生成Expression Tree而不是委托。这很好,因为无论你是使用LINQ to Objects (基于像Func<T, TResult>这样的委托)还是LINQ to Entities (使用IQueryable<T>和表达式树),你都可以使用相同的语法。

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

https://stackoverflow.com/questions/12267280

复制
相关文章

相似问题

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