rider.お品書きサクッと書いて公開して、後でちまちま修正する事がママあります。なんじゃこりゃ?と思ったら、数日してから見て貰えると嬉しいです。「スクラムの実践方法を分かりやすくマンガも交えて解説。クエリの連結と拡張メソッド小ネタだ(しかし、重要)。書いたクエリはすぐには実行されず、列挙を行った時点(おおよそ、IEnumerable<T>.GetEnumerator()を呼び出した時点)で、実際にクエリが評価される。LINQメソッドの中には、その場で評価が実行されるものもある。ToList()がそうだ。letはクエリ内の一時変数のようなもの。Object)はそこまでやらないので、letを使うと良い場合がある。query.ToList();ToList()の部分は、以下のような事をしている。leapYears.Add(value);}あるいは、もっとこう。List<int>(query);後者ならかなり短く記述出来るわけだが、ToList()を使う利点は、LINQのメソッド連結式の延長上で書けるからだ。メソッド連結式(Where()とOrderBy()はデリゲートで評価結果を得る。Studio上でこれを書けば、何を言っているのか分かると思う。要するに「すらすら書ける」ということだ。「すらすら書く」ためには、LINQの標準メソッド群でも、やや不足を感じることがある。U>に変換できるのだが、SortedDictionaryが欲しい場合には、ToSortedDictionary()なるものを期待しても、そういうメソッドはない。某サイトでは、一旦ToDictionary()で辞書を生成した後、SortedDictionaryのコンストラクタに渡して生成する例が掲載されていた。それではDictionaryは完全に無駄だ。Dictionaryは内部でハッシュコード取得と分散を行っているはずなので、そのコストはドブに捨てる事になる。そこで、無いものは作ってしまえ、と。staticメソッドの第一引数にthisを付けることで、「拡張メソッド」となる。2.0世代の知識では少し理解が厳しいかもしれない。ToDictionary()がどのように使われるのかを確認しておく。匿名クラスから値を取り出してDictionaryにする。文の後ろのブロックで読み取り専用フィールドを定義・生成出来る。上記ではArg1とArg2を宣言して、それぞれ値を代入した。匿名クラスには名前がないので、コード上で型名を書くことが出来ない。:-)そして、今やToSortedDictionary()という武器が手に入ったので、以下のように書けばよい。});晴れて、イメージ通りのToSortedDictionary()が得られた。私はToDictionary()にもやや納得が行かない部分があった。匿名クラスに値を入れ、その後セレクタを使って再度辞書に入れ直すという部分だ。無い道具は作ってしまえ、と。dictionary;}そうすると、クエリ側にはKeyValuePairを書かなければならなくなる。これをどう捉えるかだが、直後に辞書に入れると分かっているなら、KeyValuePairで生成した方がすっきりするのが私流。U>>を実装する、全てのクラスで使えるのだ。sorted.ToDictionary();もちろん、辞書じゃなくてもOKだ。04:58すごい洞察力ですね。IEnumerableがLinq結果ですが、実際はToList/ToDictonary等で無いと使いずらい事は多いですね。(1)でコメントを書くと消えちゃう(登録はされている感じ)コメントは停止中です。WordPress%d人のブロガーが「いいね」をつけました。