15
  1. 谁能解释一下 LINQ、Lambda、匿名方法、代表是什么意思?

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

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

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

4

1 回答 1

32

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 相同,但不一定
于 2010-04-16T10:56:28.870 回答