代表清楚明白
delegate int del(int i);
但是为什么我们可以使用
del myDelegate = x => x * x;
这里的问题:
- 如何确保 x 是 lambda 表达式中的 int 类型?
- 我怎么知道 lambda 表达式返回一个 int?
C# 编译器足够聪明,可以隐式地从上下文中找出x
左侧的类型。=>
由于它知道您将 lambda 分配给类型为 的变量del
,因此编译器知道这x
是一个int
.
就返回类型而言,编译器知道它x
是 an int
,因此x * x
表达式的类型也必须是int
。这就是编译器知道 lambda 的返回类型的方式。
请注意,如果没有指定的确切类型,则不会编译相同的代码myDelegate
:
// This does not compile!
var myDelegate = x => x*x;
因为你要拥有 x,你必须给它一个类型。它会检测这种类型,而不是让你一遍又一遍地告诉它它是什么类型。