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

时间:2012-10-13 02:11:46

标签: c# .net c#-4.0

代表很清楚

delegate int del(int i);

但为什么我们可以使用

del myDelegate = x => x * x; 

问题在这里:

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

3 个答案:

答案 0 :(得分:5)

C#编译器非常智能,可以从上下文隐式地找出x左侧=>的类型。由于它知道您将lambda分配给类型为del的变量,因此编译器知道xint

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

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

// This does not compile!
var myDelegate = x => x*x;

答案 1 :(得分:0)

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

答案 2 :(得分:0)

现在你让编译器确定lamdba表达式正在做什么。您可以使用ActionFunc

进行子类

操作返回类型为void,而Func的返回类型是您指定为最后一个类型参数的任何内容。您可以在

中指定其他输入
Func<in, in2, in3, output>

返回int

var f = new Func<int, int>(x => x*x);