2011-06-05 34 views
-1

我知道Lambda表達式不僅適用於LINQ。但是,我們可以使用Lambda表達式的可能場景是什麼?這些沒有Lambda表達式的例子的代碼是什麼?Lambda表達式在c中的常見使用區域#

+3

您的問題的標題不反映身體......您要回答哪一個? – xtofl 2011-06-05 11:07:34

+1

lambda表達式是一個委託,因此它們在您現在使用委託的任何地方都很有用。 – 2011-06-05 11:10:38

+0

@xtofl更改了標題。我想現在好多了 – tugberk 2011-06-05 11:27:17

回答

1

比方說,你有一個Person對象的列表,並想從中做出一個Dictionary<int, string>以便能夠通過他的SSN或其他東西來查找人名。

隨着ToDictionary方法很簡單:

var dictionary = Persons.ToDictionary(p => p.SSN, p => p.Name); 

另一種方法是創建一個字典,然後使用foreach循環:

var dictionary = new Dictionary<int, string>(); 
foreach (Person p in Persons) { 
    dictionary.Add(p.SSN, p.Name); 
} 

這是有點羅嗦,隱藏的意圖。

您可以使用ToDictionary但沒有lambda表達式:

var dictionary = Persons.ToDictionary(GetPersonKey, GetPersonValue); 

//.... 

int GetPersonKey(Person p) { 
    return p.SSN; 
} 

string GetPersonValue(Person p) { 
    return p.Name; 
} 

這顯然是不那麼簡潔。

您可以用匿名委託去:

var dictionary = Persons.ToDictionary(delegate(Person p) { return p.SSN; },         
             delegate(Person p) { return p.Name; }); 

,但它不與簡潔lambda表達式進行比較。

如果lambda表達式沒有在語言中實現,我不想使用任何LINQ擴展方法,因爲它會要求大量不必要的代碼。

1

當處理匿名方法時,我發現我從簡單地使用ReSharper瞭解了很多。

關於來自ReSharper的lambda表達式和匿名方法的建議幫助我瞭解瞭如何以及何時使用它們。

也許這可能是你的一個選擇。