c# - LINQ vs Lambda vs 匿名方法 vs 委托(delegate)

标签 c# linq delegates lambda anonymous-methods

  1. 谁能解释一下 LINQ、Lambda、匿名方法和委托(delegate)的含义?

  2. 这三者有何不同?

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

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

最佳答案

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/

相关文章:

c# - 如何设置页面导航从列表框到另一个页面?

c# - 将搜索添加到 linq 查询

c# - 从 EF 核心获取实体而不加载所有字段

c# - 平滑滚动的 .net 表单

c# - 如何获取列表中项目的重新出现次数? (没有不可变循环)

c# - 在 C# 构造函数中处理可选委托(delegate)的最佳方法是什么?

c# - 将成员委托(delegate)给经典函数有更多优点或缺点?

C# 获取请求(API)-如何回调? (委托(delegate)?)

c# - 在配置中更改 Entity Framework 提供程序

具有多个聚合的 LINQ 查询