【问题标题】:LINQ vs Lambda vs Anonymous Methods vs DelegatesLINQ vs Lambda vs 匿名方法 vs 委托
【发布时间】:2023-07-05 18:01:01
【问题描述】:
  1. 谁能解释一下 LINQ、Lambda、匿名方法、委托是什么意思?

  2. 这三个有什么不同?

  3. 一个可以替换另一个吗?

我在谷歌搜索时没有得到任何具体答案

【问题讨论】:

  • 该列表中有 4 件事...
  • @Sri Kumar:我没有投反对票,但我猜这是因为这是现成的信息和你的英语不完美的事实。
  • 有时它很容易获得,但是它本质上应该是一个信息库,因此它的用户不必总是去其他地方。杰夫·阿特伍德(Jeff Atwood)自己说,一个简单的链接答案没有帮助,但从该链接复制和粘贴信息是有帮助的。

标签: c# linq delegates lambda anonymous-methods


【解决方案1】:

LINQ 是一个广泛的技术名称,涵盖了 .NET 3.5 和 C# 3.0 的大部分变化; “语言查询”等等。

委托相当于函数指针;如果您愿意,可以将“方法句柄”作为对象,即

Func<int,int,int> add = (a,b) => a+b;

一种编写委托的方式,然后我可以调用它。代表还支持事件和其他回调方法。

匿名方法是 2.0 创建委托实例的简写,例如:

someObj.SomeEvent += delegate {
    DoSomething();
};

他们还通过“捕获的变量”(上面未显示)在语言中引入了完全闭包。 C# 3.0 引入了 lambda,它可以产生与匿名方法相同的结果:

someObj.SomeEvent += (s,a) => DoSomething();

但它可以编译成表达式树,用于针对(例如)数据库的完整 LINQ。例如,您不能针对 SQL Server 运行委托!但是:

IQueryable<MyData> source = ...
var filtered = source.Where(row => row.Name == "fred");

可以翻译成 SQL,因为它被编译成表达式树 (System.Linq.Expression)。

所以:

  • 可以使用匿名方法来创建委托
  • lambda 可能与匿名方法相同,但不一定

【讨论】:

    最近更新 更多