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;
他们之间有什么区别?
答案 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;