表达式lambda和语句lambda之间的区别

时间:2013-06-21 17:01:02

标签: c# linq c#-4.0 lambda anonymous-function

表达式lambda和语句lambda之间有区别吗?

如果是这样,有什么区别?

在下面的链接中找到了这个问题,但无法理解答案 什么是Expression Lambda?

C# interview Questions

该链接中提到的答案是这样的 右侧有表达式的lambda表达式称为表达式lambda。

根据我的理解,表达式始终只在右侧。这就是我提出这个问题的原因。有什么我不知道的吗?

4 个答案:

答案 0 :(得分:42)

这确实令人困惑的行话;我们无法想出更好的东西。

lambda表达式是其中任何一个的全能术语:

x => M(x)
(x, y) => M(x, y)
(int x, int y) => M(x, y)
x => { return M(x); }
(x, y) => { return M(x, y); }
(int x, int y) => { return M(x, y); }

前三个是表达式lambdas ,因为lambda运算符的右侧是一个表达式。最后三个是语句lambdas ,因为lambda运算符的右侧是

这也说明左侧有三种可能的语法:单个参数名称或无类型参数的带括号的列表,或带括号的参数列表。

答案 1 :(得分:15)

是的 - 或者我应该说一个人定义了另一个。

lambda表达式允许您分配简单的匿名函数。

表达式lambda 是一个类型的lambda,在lambda运算符的右边有一个表达式。

另一种类型的lambda表达式是语句lambda ,因为它在表达式的右侧包含一个语句块{...}

  • 表达式lambda采用以下形式:number => (number % 2 == 0)
  • 声明lambda采用以下形式:number => { return number > 5 }

答案 2 :(得分:9)

lambda表达式是一种语法,允许您在代码中直接创建一个没有名称的函数,作为表达式。

有两种lambda表达式,具体取决于它们的主体:

  • 表达式lambdas ,其主体只是一个表达式,例如(i, j) => i + j
  • 语句lambdas ,其正文是完整的陈述,例如.. (i, j) => { return i + j; }

答案 3 :(得分:1)

lampda表达式是一个匿名函数,编译器可以将其转换为Func<T>Expression<Func<T>>(由编译器根据使用情况推断)。

“表达式lamdba”的含义并不完全清楚,但是如果您在播客/网络广播中听过这句话,那么它可能或者指的是lambda表达式。或者它可以是属性Expression.Lambda,用于从Expression实例获取lambda。