13

我试图弄清楚 C# 的匿名函数语法,但有些东西对我来说没有意义。为什么这是有效的

 Func<string, string> f = x => { return "Hello, world!"; };

但这不是吗?

 Func<string> g = { return "Hello, world!"; };
4

2 回答 2

30

第二个仍然需要 lambda 语法:

Func<string> g = () => { return "Hello, world!"; }; 

首先,您正在有效地编写:

Func<string, string> f = (x) => { return "Hello, world!"; };

()但是,如果只有一个参数,C# 将允许您在定义 lambda 时省略,x =>而是让您编写。如果没有参数,则必须包含().

这在 C# 语言规范的第 7.15 节中指定:

在具有单个隐式类型参数的匿名函数中,可以从参数列表中省略括号。换句话说,表单的匿名函数

( 参数 ) => expr

可以简写为

参数 => expr

于 2013-05-16T20:08:13.850 回答
-2

你需要知道函数定义:

封装具有一个参数并返回由 TResult 参数指定的类型的值的方法。

参考:

微软

于 2013-05-16T20:15:10.883 回答