Lambda 表达式可以具有自然类型,这使编译器可从 Lambda 表达式或方法组推断委托类型。
如果编译器无法推断返回类型,Lambda 表达式可以声明该类型。
属性可应用于 Lambda 表达式。
Func<string> hello = () => "Hello World"; Console.WriteLine(hello());
var hello = () => "Hello World"; // C# 9 无法编译!
var hello = () => null; // 无法编译!
var hello = string? () => null; // OK!
M1(() => "test"); // Func<string> M2(() => "test"); // Func<string> M3(() => "test"); // Expression<Func<string>> void M1(object x) { } void M2(Delegate x) { } void M3(Expression x) { }
var fn1 = [Description("Hello")] () => "Hello"; var fn2 = ([Description("参数") string s) => "Hello " + s; var fn3 = [Description("Hello")] [return: Description("返回字符串")] ([Description("参数")] string s) => "Hello " + s;
为fn1
的匿名方法应用DescriptionAttribute修饰符,也就是给方法加上说明文字。
为fn2
的匿名方法加上参数的说明文字。
为fn3
的匿名方法、参数、返回类型都加上说明文字。