前提・実現したいこと
こちらのサイトにToDictionaryメソッドの解説がされていますが、
構文と実際に処理しているコードの形式が合わなかったり、説明で分からない点があります。
ご教示お願いします。
試したこと
下記2つのコードが同等であることは、感覚的になんとなく理解できました。
Dictionary<int, Skill> skillDictonary = new Dictionary<int, Skill> (); foreach (Skill skill in skillList) { skillDictionary.Add (skill.Id, skill); }
Dictionary<int, Skill> skillDictonary = skillList.ToDictionary (skill => skill.Id);
この解説がよくわからないです。
ここで使ったオーバーロードは、引数にデリゲートをとります。 IEnumerable<T>の各要素がDictionaryのバリューになります。 引数に渡したデリゲートを、各要素(バリュー)に適用した結果が要素(バリュー)に対応するキーとなります。
引数の「skill => skill.Id」というのはデリゲートなんですか?
また、「引数に渡したデリゲートを、各要素(バリュー)に適用した結果」というのも、どのように適用したのかわからないです。
デリゲートは登録しておいたメソッドを呼び出すものだと認識していましたが、
登録しておいたメソッドはないと思ったからです。
また、下記の構文も
「skillList.ToDictionary (skill => skill.Id);」の形式と全然違うように思えます。
public static Dictionary<TKey, TSource> ToDictionary<TSource, TKey>( this IEnumerable<TSource> source, Func<TSource, TKey> keySelector )
例えば、構文だと引数が「TSource, TKey」のようにカンマ区切りで2個与えられていますが、
コードでは、skill => skill.Idの1つの引数を与えていますよね。
また、デリゲートの件と重複しますが、skill => skill.Id がどういう適用になるのかわからないです。
この形式がラムダ式で、「(引数)=>引数を使った処理」という形式なのはわかりますが。
ご教示お願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/01/14 15:43