3

代表清楚明白

delegate int del(int i);

但是为什么我们可以使用

del myDelegate = x => x * x; 

这里的问题:

  1. 如何确保 x 是 lambda 表达式中的 int 类型?
  2. 我怎么知道 lambda 表达式返回一个 int?
4

3 回答 3

5

C# 编译器足够聪明,可以隐式地从上下文中找出x左侧的类型。=>由于它知道您将 lambda 分配给类型为 的变量del,因此编译器知道这x是一个int.

就返回类型而言,编译器知道它x是 an int,因此x * x表达式的类型也必须是int。这就是编译器知道 lambda 的返回类型的方式。

请注意,如果没有指定的确切类型,则不会编译相同的代码myDelegate

// This does not compile!
var myDelegate = x => x*x;
于 2012-10-13T02:14:40.230 回答
0

因为你要拥有 x,你必须给它一个类型。它会检测这种类型,而不是让你一遍又一遍地告诉它它是什么类型。

于 2012-10-13T02:13:44.187 回答
0

现在,您让编译器确定 lamdba 表达式在做什么。您可以使用ActionFunc进行子类化

Actions 的返回类型是 void,而 Func 的返回类型是您指定为最后一个类型参数的任何类型。您可以在两者中指定额外的输入

Func<in, in2, in3, output>

用于返回一个 int

var f = new Func<int, int>(x => x*x);
于 2012-10-13T02:15:48.560 回答