我知道匿名方法可以用来定义委托并编写内联函数。那么使用Lambda表达式有什么不同呢?
我想我有点困惑什么时候使用什么。
编辑: 此外,似乎为了使用匿名或Lambda表达式,需要为类型创建扩展方法?
我知道匿名方法可以用来定义委托并编写内联函数。那么使用Lambda表达式有什么不同呢?
我想我有点困惑什么时候使用什么。
编辑: 此外,似乎为了使用匿名或Lambda表达式,需要为类型创建扩展方法?
delegate(params) {method body}
等效的lambda表达式如下:params => method body
简而言之,所有的lambda表达式都是匿名方法,但是可以有一个不使用lambda语法(与上面的第一个示例类似)的匿名方法。希望这个回答对你有所帮助!
只有没有方法主体的lambda表达式才能被转换为表达式树
以下结构可编译:
Func<int> exp1 = () => 1;
Func<int> exp2 = () => { return 1; };
Func<int> exp3 = delegate { return 1; };
Expression<Func<int>> exp4 = () => 1;
以下不是
关于IT技术的内容Expression<Func<int>> exp5 = delegate { return 1; }; //no anonymous delegates
Expression<Func<int>> exp6 = () => { return 1; }; //or lambdas with block body
即使在不太高级的水平上也有差别(Jon Skeet在这里指出了一个例子: sick difference example)
另一个区别是,如果您不打算在方法体内使用它们,则可以创建不带参数列表的匿名委托,而使用 lambda 则必须始终提供参数。
以下两行演示了差异
Func<int, int, int, int, int> anonymous = delegate { return 1; };
Func<int, int, int, int, int> lambda = (param1, param2, param3, param4) => 1;
你实际上做的是相同的事情,但匿名委托在这里显然更好。
实际上并不是。这两个功能本质上是相同的,只是语法结构不同而已。总体趋势似乎是从C# 2.0匿名方法语法向lambda风格语法转变,适用于匿名表达式和函数。