代表很清楚
delegate int del(int i);
但为什么我们可以使用
del myDelegate = x => x * x;
问题在这里:
答案 0 :(得分:5)
C#编译器非常智能,可以从上下文隐式地找出x
左侧=>
的类型。由于它知道您将lambda分配给类型为del
的变量,因此编译器知道x
是int
。
就返回类型而言,编译器知道x
是int
,因此x * x
表达式的类型也必须是int
。这就是编译器如何知道lambda的返回类型。
请注意,如果没有指定myDelegate
的确切类型,则不会编译相同的代码:
// This does not compile!
var myDelegate = x => x*x;
答案 1 :(得分:0)
因为你有x,你必须给它一个类型。它会检测这种类型,而不是让你告诉它它是什么类型。
答案 2 :(得分:0)