2016-12-05 77 views
-1

如果我有:Linq表達式的一部分傳遞給lambda表達式的值是什麼?

public Dictionary<string, int> ChangeDictionary(Dictionary<string, int> myDictionary) 
     { 
      myDictionary.OrderBy(a => rnd.Next()); 
     } 

什麼是 「一」?我知道它是匿名函數的參數,但我不知道這個語法是什麼。我無法從MSDN文檔中知道。是「a」字典myDictionary

編輯:對不起。通過什麼是「一」,「我的意思是獲得通過在作爲參數a的價值在於它myDictionary

+0

'a'是'KeyValuePair '。如果你檢查調用'OrderBy()'它需要'IEnumerable '。它提供了一個參數'T'。在'Dictionary'的情況下,它實現了'IEnumerable >' – Rob

+0

現在你明白了嗎?如果是這樣,您可以考慮將答案標記爲已接受。如果不是,請告訴我們。 –

+0

爲什麼downvote? – johnny

回答

4

的?‘a’是一個參數,你的拉姆達可以改寫:

private int MyOrderSelector(KeyValuePair<string, int> a) 
{ 
    return rnd.Next(); 
} 

你只是把它的參數,據我所知,它的類型取決於拉姆達的簽名。在這種情況下OrderBy需要一個Func<KeyValuePair<string, int>, int>

你可以說是通過智能感知,或者是什麼類型a使用LINQ;參數是枚舉集合中的單個項目是IEnumerable<KeyValuePair<K, V>>這些項目也是KeyValuePair

到編輯,在此具體情況下,你拉姆達一再呼籲,在字典中以反過來作爲參數值的每個項目。更一般地說,a的值是調用者作爲第一個參數傳遞的值。

+0

我在問「a」的價值來自哪裏。 – johnny

+1

@johnny來自調用者; lambda是一個函數,除非被調用,否則不會執行任何操作 – BradleyDotNET