每次我接受采访时,我发现很难定义。 有些人可以在这里解释一下这些与它们之间的区别有什么区别?面试官对我的回答永远不满意。究竟他想听什么我永远不懂?
匿名方法:
我说这些是简单的内联函数。
扩展方法:
这些是我们可以在不执行任何操作的情况下即可添加的方法 接口
Lambda表达式:
我说它是用于查询对象的,我开始告诉他们 语法' S
Linq:
我说它是一种查询任何集合的查询语言。我开始吧 告诉语法。
过去六个月我一直在使用这些东西,但无法正确定义。
答案 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是内联的匿名方法,它们是Func
或Action
的适当参数化的直接子类。如果方法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>
上的扩展方法更容易访问。