2017-02-24 130 views
0

我是C#初学者,通过不断深入学习语言很感兴趣。最近使用Lambda函数来制作一段代码,但不知道它是如何工作的。lambda函数和OOP

我写硬代码是从列表中的映射值。请看下图:

var validRatings = new List<int> { 1, 2, 3, 4, 5 }; 

二手Lambda和它的工作:

var validRatings = settings.grossAlphas.Select(ga => ga.fundRating).ToList(); 

我明白lambda函数是匿名的,但他们如何比普通的功能不同,他们如何适应OOP背景下C#中?

+0

你是什么意思他们如何适应面向对象的上下文? – nbokmans

+1

兰姆达斯是一种表达形式。你需要研究LINQ。这就是说,这不是一个教程网站;除非您显示相关代码的实际问题,否则您将得不到多少帮助。 – CDove

+0

那么,当你不需要并且想要摆脱所有其他事情并且留下对你最重要的东西时,匿名函数就很有用。 –

回答

6

lambda函数是匿名的,但他们如何比普通的功能有什么不同?

“X和Y有什么不同?通常对于StackOverflow来说不是一个好问题。在这里,这里有一棵苹果树和一棵橡树;他们有什么不同?很难说。

简言之虽然:

  • lambda表达式可以被转换成代表或表达式树。常规功能只能转换为代表。

  • 兰巴达斯可以表达酒体或声明酒体。在C#6之前,常规函数只能是陈述性的。

  • Lambdas可以从上下文推断出它们的正式参数类型;常规功能不能。

他们如何适应OOP背景下C#中?

他们没有。 Lambdas是函数式编程的一个想法,而不是面向对象编程。 OOP的基本思想是功能在逻辑上与数据连接; lambdas与此完全相反。 Lambdas大约是与数据对象的函数解耦

如果那不能回答你的问题,那么问一个更明确的问题。 “oop背景”是什么意思?

+0

这有助于我理解现在的概念。非常感谢!! –

1

一个正常的方法可以通过名字随时在代码中调用,但有些时候,我们需要一些代码块将只执行一次或来电者只有一个,所以如果你在上面的代码中看到。

lambda表达式的主要目的是为调用代码提供灵活性来传递它自己的实现,例如在上面的例子中,您可以指定自己的实现并将我的原始集合投影到一个新的集合,该集合包含一个名为fundRating,你可能只需要这块用例的代码块,所以lambda表达式创建的匿名方法只能由Select()方法实现调用。

希望它有帮助!

1

您可以创建一个函数的名字,像这样:

private string getFundRating(GrossAlpha ga) 
{ 
    return ga.fundRating; 
} 

然后你可以通过该功能在您的Select。像这样:

var validRatings = settings.grossAlphas.Select(getFundRating).ToList(); 

这将是一个不使用拉姆达的例子。在这种情况下,你正在使用一个命名函数。你可以在代码的其他地方或另一个linq语句中使用相同的函数。

在您所提供的例子,你动态创建一个功能,甚至不命名它,并将它传递的Select

注:我假设你有一个名为GrossAlpha的对象,并且settings.grossAlphas返回这些对象的列表。

关于你的问题的其他部分。它们如何适合面向对象的情况下,我不能解释它比埃里克·利珀特做得好多了。

0

一个简单的方法去思考一个匿名方法的,虽然不是纯粹的定义,就是要使用一次,并继续前进的方法。他们被称为匿名因为不是命名为方法。在C#中,Lambdas是一种非常强大的方式,可以根据您的个别对象来链接常用的方法。

你的代码是干什么的,在一条线将采取多条线路写出基于你的类中的每一个独特的方法。

要打破你的代码是干什么的逐点:根据通过的枚举行走(列表,阵列等)通过对象的对象和聚合他们:

var validRatings = settings.grossAlphas.Select(ga => ga.fundRating).ToList(); 

grossAlphas.Select(...)您在.Select(...)内提供的参数。

ga => ga.fundRating:你是说你只想要聚集来自每个对象的fundRating属性。

.ToList():正在将您的枚举变为List<int>()

这可以使您免去编写List<int> GetFundRatings()一次需要使用FundRatings列表。

另见:

What is a lambda (function)?

C# Lambda expressions: Why should I use them?