2016-12-05 8 views
-1

私が持っている場合は、 "A"Linq式の一部であるときにラムダに渡される値は何ですか?

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

は何ですか?私はそれが無名関数のパラメータであることを知っていますが、私はこの構文が何を呼び出すのか分かりません。私はMSDNのドキュメントからはわかりませんでした。 "a"は辞書myDictionaryですか?

EDIT:申し訳ありません。 「私は、パラメータ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(); 
} 

あなただけの私の知る限り、パラメータを呼び出します。その種類は、ラムダの署名に依存します。この場合OrderByFunc<KeyValuePair<string, int>, int>を期待しています。

あなたはインテリセンス経由でどのようなタイプa伝えることができ、またはLINQを使用して、引数は列挙されるコレクション内の単一項目です。0123以降はIEnumerable<KeyValuePair<K, V>>で、項目もKeyValuePairです。

この編集では、このの特定のの場合、ラムダが繰り返し呼び出され、辞書の各項目がパラメータ値として順番に使用されます。より一般的には、aの値は、呼び出し側が最初の引数として渡した値です。

+0

私は "a"の価値がどこから来るのか聞いています。 – johnny

+1

@johnny発信者から。ラムダは関数であり、呼び出されなければ何もしません – BradleyDotNET

関連する問題