34

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

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

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

C# 面试题

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

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

4

4 回答 4

53

这确实是令人困惑的行话;我们想不出更好的办法。

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); }

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

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

于 2013-06-21T17:10:43.753 回答
18

是的——或者我应该说一个定义另一个。

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

表达式 lambda 是一种在lambda 运算符右侧有一个表达式的 lambda。

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

  • 表达式 lambda 采用以下形式:number => (number % 2 == 0)
  • 语句 lambda 采用以下形式: number => { return number > 5 }
于 2013-06-21T17:04:11.863 回答
10

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

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

  • 表达式 lambdas,其主体只是一个表达式,例如(i, j) => i + j
  • 语句 lambdas,其主体是完整的语句,例如。(i, j) => { return i + j; }
于 2013-06-21T17:12:56.453 回答
1

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

尚不完全清楚您所说的“表达式 lamdba”是什么意思,但如果您在播客/网络广播或其他内容中听到过这个短语,它可能指的是 lambda 表达式。或者它可以是属性Expression.Lambda,您可以使用它从 Expression 实例中获取 lambda。

于 2013-06-21T17:07:43.493 回答