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;
它们之间有什么区别?
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;
它们之间有什么区别?
它们都是一样的——只是编译成相同东西的语法糖。
也就是说 - 使用类型推断和其他编译器好东西,3 只是说 1 的一种非常短的方式。
他们都是一样的。前两个是匿名方法的例子。最后一个是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;