实例化委托的各种方式之间的差异(Func <t,t =“”>)?</t,>

时间:2013-02-23 15:07:09

标签: c# syntax delegates anonymous-function func

1

Func<int, int> myFunc = new Func<int,int>(delegate(int x) {
    return x + 1;
});

2

Func<int, int> myFunc = delegate(int x) {
    return x + 1;
};

第3

Func<int, int> myFunc = x => x + 1;

他们之间有什么区别?

2 个答案:

答案 0 :(得分:8)

它们都是一样的 - 只是syntactic sugar编译成相同的东西。

那就是 - 使用类型推断和其他编译器的好东西,3只是一个非常简短的说法1。

答案 1 :(得分:7)

他们都是一样的。前两个是anonymous methods的示例。最后一个是lambda expression的示例。匿名方法和lambda表达式统称为匿名函数

在C#2中引入了匿名方法; lambda表达式是在C#3中引入的,并且大部分都取代了匿名方法。请注意,lambda表达式也可以转换为expression trees,它将代码表示为数据而不是IL,以及委托。

请注意,Func<TResult>Func<T, TResult>等只是委托类型的示例。您可以将匿名函数转换为任何兼容的委托类型。例如:

public delegate int Foo(string x);

Foo foo = text => text.Length;