C#中的Lambda表达式[重复]

Posted

技术标签:

【中文标题】C#中的Lambda表达式[重复]【英文标题】:Lambda expression in C# [duplicate] 【发布时间】:2011-01-21 19:30:49 【问题描述】:

是否存在使用 lambda 表达式特别有用或主要用途是编写更少代码的情况?

【问题讨论】:

编写更简洁易读的代码不是特别有用吗? 看看 John Skeet 的 SO 回答 here。这是另一个 SO 问题with specific uses of lambdas 嗯嗯,确实如此。但我想知道它是否是唯一的主题...... :-) 【参考方案1】:

在语言中添加 lambda 的理由有两个。

(1) 它们使查询理解的句法转换成为可能。当你说

from customer in customers 
where customer.City == "London" 
select customer

变成了

customers.Where(customer=>customer.City == "London")

(2) 它们可以变成表达式树,从而使 LINQ-to-SQL、LINQ-to-Entities 等成为可能。也就是说,它们可以代表执行语义的能力检查其结构的能力

【讨论】:

你能提供一个表达式树的例子吗?谢谢 @Eric - 你忘了说“而且他们真的很酷”;) @Maurizio: blogs.msdn.com/charlie/archive/2008/01/31/…【参考方案2】:

Lambda 表达式是syntactic sugar 对应anonymous methods,它们的用例大多相同。

Lambda 也可以转换为表达式树。

由于它们更短且更容易编写(至少对于简单的情况),这本身就很有帮助。

【讨论】:

我喜欢“语法糖”这个表达,我不知道。 完全相同 - lambda 表达式也可以转换为表达式树,而匿名方法不能。 (没有“匿名委托”这样的术语 - 有 匿名方法匿名函数 - 后者是一个涵盖匿名方法和 lambda 表达式的术语。

以上是关于C#中的Lambda表达式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C# 闭包中的 Lambda 表达式是啥?

C# 闭包中的 Lambda 表达式是啥?

lambda 表达式中的 C# 切换

C#中的委托,匿名方法和Lambda表达式

C# Lambda表达式详细总结

c# 中的 Lambda 表达式