谁能解释一下 LINQ、Lambda、匿名方法和委托(delegate)的含义?
这三者有何不同?
一个可以替换另一个吗?
我在谷歌搜索时没有得到任何具体答案
最佳答案
LINQ 是一个宽泛的技术名称,涵盖了 .NET 3.5 的大部分内容和 C# 3.0 的变化; “用语言查询”等等。
委托(delegate)相当于函数指针;一个“方法句柄”作为一个对象,如果你愿意的话,即
Func<int,int,int> add = (a,b) => a+b;
是一种编写我随后可以调用的委托(delegate)的方法。委托(delegate)还支持事件和其他回调方法。
匿名方法是用于创建委托(delegate)实例的 2.0 简写,例如:
someObj.SomeEvent += delegate {
DoSomething();
};
他们还通过“捕获变量”(上面未显示)在语言中引入了完全闭包。 C# 3.0 引入了 lambda,它可以产生与匿名方法相同的结果:
someObj.SomeEvent += (s,a) => DoSomething();
但它可以也编译成表达式树,用于针对(例如)数据库的完整 LINQ。例如,您不能针对 SQL Server 运行委托(delegate)!但是:
IQueryable<MyData> source = ...
var filtered = source.Where(row => row.Name == "fred");
可以翻译成 SQL,因为它被编译成表达式树 (System.Linq.Expression
)。
所以:
- 可以使用匿名方法来创建委托(delegate)
- lambda 可能与匿名方法相同,但不一定
关于c# - LINQ vs Lambda vs 匿名方法 vs 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2652264/