rider.お品書きサクッと書いて公開して、後でちまちま修正する事がママあります。なんじゃこりゃ?と思ったら、数日してから見て貰えると嬉しいです。「スクラムの実践方法を分かりやすくマンガも交えて解説。3.0でサポートされた。2.0のプロジェクトでも使いたいと思う事がある。2.0環境でもLINQを使う事が出来る。LINQを使うためには、2つの要件を満たす必要がある。C#コンパイラが、LINQクエリ構文を解釈出来るようにする。3.0以上のコンパイラを使用すればよい。2008以上の環境を使えば、コンパイラはfrom・where・select・orderbyなどのLINQクエリ構文や、ラムダ式を解釈可能になる。2.0に設定されていても、これらの構文は解釈可能だ。LINQの拡張メソッド群(Enumerableクラスなど)が必要。2.0のmscorlib.dllやSystem.dllには含まれていない。従って、何とかして用意する必要がある。前者の要件に絡む、分かりにくい問題がある。「拡張メソッド」の扱いだ。3.0以上のコンパイラを使えば、拡張メソッド構文は解釈可能だ。拡張メソッドが定義されたクラスは特殊な扱いを受ける。3.0以上のコンパイラで拡張メソッドを定義すると、暗黙にExtensionAttribute属性がクラスとメソッドに適用される(上の例ではわざと書いた)。そのため、アセンブリを生成する際にこの拡張メソッドが見つからないと、ビルドに失敗する。2.0のmscorlib.dllやSystem.dllには存在しないため、以下のようなコードも盛り込んでおく必要がある。}}そして、こまごまとしたクラス(例えば、Func<T>やAction<T>など)と、あなたが使いたい標準的なLINQ拡張メソッド群(Where<T>やSelect<T>やOrderBy<T>等)を用意する必要がある。3.5以降のLINQを模倣できる。書いたのは、どうしても回避出来ない制限が一つだけあるためだ。それは、IEnumerable<T>が、ジェネリック共変性をサポートしていない事による。これによって発生する問題は別の機会に譲るとして、実際問題、大量のLINQ拡張メソッドを自前で準備するのはなかなか難しい。同じような事を考える人は世の中にも大勢いて、NuGetでパッケージ化されていたりもするので、特に理由が無ければ、このようなパッケージを利用したほうが良いだろう。以下の「linqbridge」は、単一ソースコードのバージョンもあるので、自分のライブラリに容易に組み込みやすいだろう。(Embedded)なお、linqbridgeはPLINQをサポートしていない。AsParallel()から始まるPLINQを用意するのは複雑すぎる。3.0に移行する事を真剣に考えた方が良い。しても並列実行を諦めることが出来ないのなら、TPLの自前実装で我慢しよう。Palallel.ForEach()なら、自力でも実装できるはずだ。WordPress%d人のブロガーが「いいね」をつけました。