代表清楚明白
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,你必须给它一个类型。它会检测这种类型,而不是让你一遍又一遍地告诉它它是什么类型。