2013-05-16 112 views
10

我想弄清楚匿名函数的C#语法,而且对我来说没有任何意义。为什么这是有效的匿名函数没有输入参数

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

但这不是?

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

回答

23

第二个仍然需要lambda语法:

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

在第一个,你有效地写着:

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

但是,在定义时,C#会让你离开关()一个lambda如果只有一个参数,让你写x =>来代替。如果没有参数,则必须包含()

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

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

(PARAM)=>的匿名函数EXPR

可以缩写为

PARAM => EXPR

-2

您需要知道函数的定义:

封装了一个方法,它有一个参数并返回一个值o f 由TResult参数指定的类型。

参考文献:

Microsoft

+0

'Func键'(这是他的第二个例子是使用)是不带任何参数,并返回一个字符串的函数。 – Servy

+0

他正在使用:http://msdn.microsoft.com/en-us/library/bb534960.aspx –