关于lambda表达式和委托的混淆?

Ada*_*Lee 3 .net c# c#-4.0

代表很清楚要理解

delegate int del(int i);
Run Code Online (Sandbox Code Playgroud)

但为什么我们可以使用

del myDelegate = x => x * x; 
Run Code Online (Sandbox Code Playgroud)

问题在这里:

  1. 我怎样才能确保x是lambda expresison中的int类型?
  2. 我怎么知道lambda表达式返回一个int?

das*_*ght 5

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)