8

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;

它们之间有什么区别?

4

2 回答 2

8

它们都是一样的——只是编译成相同东西的语法糖。

也就是说 - 使用类型推断和其他编译器好东西,3 只是说 1 的一种非常短的方式。

于 2013-02-23T15:09:15.580 回答
7

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

C# 2 中引入了匿名方法;lambda 表达式是在 C# 3 中引入的,主要取代了匿名方法。请注意,lambda 表达式也可以转换为将代码表示为数据而不是 IL 的表达式树以及委托。

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

public delegate int Foo(string x);

Foo foo = text => text.Length;
于 2013-02-23T15:10:09.690 回答