匿名方法vs扩展方法vs Lambda表达vs Linq

时间:2014-04-28 14:03:04

标签: c# linq

每次我接受采访时,我发现很难定义。 有些人可以在这里解释一下这些与它们之间的区别有什么区别?面试官对我的回答永远不满意。究竟他想听什么我永远不懂?

匿名方法:

  

我说这些是简单的内联函数。

扩展方法:

  

这些是我们可以在不执行任何操作的情况下即可添加的方法   接口

Lambda表达式:

  

我说它是用于查询对象的,我开始告诉他们   语法' S

Linq:

  

我说它是一种查询任何集合的查询语言。我开始吧   告诉语法。

过去六个月我一直在使用这些东西,但无法正确定义。

1 个答案:

答案 0 :(得分:2)

匿名方法和lambdas非常相似,lambdas是AM的更强大的子类型。 LINQ使用lambdas来实现其大部分功能。

在C#v2中,创建委托可以通过将代码块作为参数传递给委托构造函数来完成,就像在MSDN的示例中一样:

button1.Click += delegate(System.Object o, System.EventArgs e)
               { System.Windows.Forms.MessageBox.Show("Click!"); }

Lambdas是内联的匿名方法,它们是FuncAction的适当参数化的直接子类。如果方法Foo采用Func<int, string>类型的参数,那么您可以这样调用它:

Foo(x => "the number " + (string)x);

lambda x => "the number " + (string)x将是Func,取一个整数并在调用Invoke时产生一个字符串。

LINQ是处理数据的好方法。它的许多方法,如Max,可以使用自定义函数来确定排序或控制LINQ操作的任何操作。传递lambda(或者,如果需要,传递对命名函数的引用),LINQ将使用它来执行操作。例如:

// list is a List<string>
Console.WriteLine(list.Max(str => str.Length));

将打印最大(最长)字符串。

编辑后

编辑:扩展方法是编译器帮助实现的语法糖。它们是在类/接口/结构不同的地方定义的方法,但可以写成好像它们是那个东西的成员。 LINQ的方法可以作为IEnumerable<T>上的扩展方法更容易访问。