2017-02-24 105 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?