代表很清楚要理解
delegate int del(int i);
Run Code Online (Sandbox Code Playgroud)
但为什么我们可以使用
del myDelegate = x => x * x;
Run Code Online (Sandbox Code Playgroud)
问题在这里:
C#编译器非常智能,可以隐式地从上下文中找出x
左侧的类型=>
.因为它知道你将lambda分配给一个类型的变量del
,所以编译器知道它x
是一个int
.
就返回类型而言,编译器知道它x
是一个int
,因此x * x
表达式的类型也必须是int
.这就是编译器如何知道lambda的返回类型.
请注意,如果没有myDelegate
指定的确切类型,相同的代码将无法编译:
// This does not compile!
var myDelegate = x => x*x;
Run Code Online (Sandbox Code Playgroud)