LINQ vs Lambda vs Anonymous Methods vs Delegates

时间:2010-04-16 10:46:36

标签: c# linq delegates lambda anonymous-methods

  1. 任何人都可以解释什么是LINQ,Lambda,匿名方法,代表意味着什么?

  2. 这3个如何彼此不同?

  3. 另一个可替换吗?

  4. 当我使用谷歌搜索

    时,我没有得到任何具体的答案

3 个答案:

答案 0 :(得分:30)

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引入了lambdas,可以生成与匿名方法相同的内容:

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

但是可以编译成表达式树,以便针对(例如)数据库提供完整的LINQ。例如,您无法对SQL Server运行委托!但是:

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

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

所以:

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

答案 1 :(得分:1)

虽然此链接的标题是Anonymous methods,但它涵盖了委托,匿名方法和lambda表达式。

答案 2 :(得分:0)

LINQ Lambda Expressions anonymous methods delegates

这些是来自MSDN的完整解释,大多数都带有示例......