我并不是获取 lambda表达式。虽然他们自ALGOL时代就已存在,但直到最近,当Python和Ruby变得非常受欢迎时,我才开始听到它们。既然C#具有=>
语法,那么我的世界(.NET)中的人们越来越多地讨论lamdba表达式。
我已经读过关于lambda演算的维基百科文章,但我不是一个真正的数学家。从实际角度来看,我并不是真的理解它。我什么时候会使用lambda表达式?为什么?我怎么知道这是我应该做的?
您能否以前后格式展示如何解决lambda表达式问题的示例?任何命令式语言都很好,但C#对我来说最容易理解。
答案 0 :(得分:21)
基本上就C#而言,lambda表达式是一种创建委托(或表达式树)的简单方法,但现在让我们把它们放在一边。
在C#1中,我们只能从普通方法创建委托实例。 在C#2中,我们获得了匿名方法。 在C#3中,我们获得了lambda表达式,就像更简洁的匿名方法。
当你想表达一些取一个值并返回一个值的逻辑时,它们特别简洁。例如,在LINQ:
的上下文中 // Only include children - a predicate
var query = dataSource.Where(person => person.Age < 18)
// Transform to sequence of names - a projection
.Select(person => person.Name);
在my article on closures中,对此进行了更全面的讨论 - 以及其他方面。
答案 1 :(得分:3)
this question的答案可能对您有用。
答案 2 :(得分:2)
lambda函数只是匿名函数。
例如,在python中,您希望将列表中的所有元素加倍。有三种方法可以做到:
列表表达式:
[2*x for x in list]
显式功能:
def double(x):
return 2*x
map(double, list) # iirc
与lambdas:
double = lambda x : 2*x
map(double, list)
因此,大多数语言中的lambda只是一种避免创建新函数的语法开销的方法。
答案 3 :(得分:1)
这是我见过的关于如何理解在C#中使用lambda表达式的重要思想的更好解释之一:
http://www.developingfor.net/c-30/upgrade-your-c-skills-part-3-lambda-expressions.html
答案 4 :(得分:0)
我在.NET中使用lambda表达式的主要用途是使用列表。使用lambda表达式,您可以使用与构建SQL语句来搜索数据库表的方式类似的方式在列表上构建查询。
答案 5 :(得分:0)
lambda表达式是一个功能值(同样意义上'int'和'string'是值)。这意味着可以
查看map,filter或fold(用任何函数语言)等函数来查看lambda表达式如何用作其他函数的参数。