Eachループ、ForEachメソッド、LINQの拡張メソッドを使用する方法がある。これらの使い方を紹介する。T)(VB)クラス(System.Collections.Generic名前空間)であろう(以降、型引数はC#での表記だけとさせていただく)。本稿では3通りの方法を解説する。補足として条件に一致する要素をまとめて削除する方法も紹介する。2.0で導入されたものだが、本稿はそれ以降の内容も含んでいる。2015(またはそれ以降)が必要である。List<T>コレクションの各要素を処理するには?特定の要素を処理する場合で、その要素のインデックスが分かっているときは、インデックスで要素を指定して直接処理できる。ないときは(全要素を順に処理するとき、あるいは、各要素をチェックしてみないと処理をするかどうか分からないとき)、次のような方法がある。Each(VB)ループを使う(次のコードの1番目)。同じことは、List<T>クラスのForEachメソッドでも可能だ(次のコードの2番目)。処理結果を元のList<T>コレクションに書き戻すのではなく、別の新しいコレクションにまとめたいときにはLINQ拡張を使うとよい(次のコードの3番目)。Eachループを使う例を確認してみよう。取り扱う要素としては、次のコードのような「SampleData」クラスを使う。整数型の「Number」プロパティと文字列型の「Value」プロパティを持っている。ToStringメソッドをオーバーライドしている。Classサンプルコードで使うデータの定義(上:C#、下:VB)「Number」と「Value」は単純なプロパティだ。オーバーライドしているToStringメソッドは、「Number」と「Value」の値を「:」で連結して返す。6.0]」をご覧いただきたい。14で追加された補間文字列機能を使用する」)を見てほしい。Eachループで処理してみよう。処理内容は、「『Number』が奇数なら、『Value』を頭文字だけにする」というものだ。次のコードは、コンソールアプリの例だ。後のサンプルコードでも使うため、「DisplayItems<T>」メソッドを切り出してある。TIPS:構文:コレクションのインスタンス化と同時に要素を追加するには?[C#/VB]」をご覧いただきたい。2015からのものだ。6.0]」をご覧いただきたい。TIPS:VB.NETでクラス名を省略してメソッドや定数を利用するには?」で解説している。Studioでコンソール・アプリケーションのデバッグ実行時にコマンド・プロンプトを閉じないようにするには?」をご覧いただきたい。List<T>クラスのForEachメソッドを使う例List<T>クラスにはForEachメソッドがある(LINQ拡張にはない)。Eachループの部分は次のコードのようにも書ける。5:eList<T>クラスのForEachメソッドで処理をする例(上:C#、下:VB)ここではForEachメソッドの引数としてラムダ式を与えている。9.0)からの機能なので、それ以前の場合は処理を別のメソッドに切り出して、ForEachメソッドの引数にはそのメソッド名を与える。処理結果を別の新しいコレクションに格納したい場合は、LINQを使うとスマートだ。LINQのSelect拡張メソッドだけでも書ける。「奇数の場合だけ処理したい」というような場合には、Select拡張メソッドの中でif文を使うのではなく、LINQのWhere拡張メソッドを先に使って対象を絞り込むようにするとより分かりやすいコードになる。前出の例で変更した要素だけを含む新しいコレクションを作りたい場合、LINQ拡張を使うと次のコードのようになる。Function)'DisplayItems(result)LINQ拡張で処理をする例(上:C#、下:VB)Select拡張メソッドだけでも書けるが、ここでは先にWhere拡張メソッドを使って処理対象の要素を絞り込んでいる。それによってForEachメソッドの例にあったif文が不要になった。処理対象を絞り込んでから処理をしていることが明確になっている。System.Linq;」が必要である。補足:要素を削除するにはRemoveAllメソッド処理の結果によって要素を取り除きたいこともある。前述のような要素の内容の変更と、要素の削除とを同時に行うのはちょっと難しい(forループを末尾から回すことになる)。削除をするだけならば、List<T>クラスのRemoveAllメソッドが使える(次のコード)。TIPS:リスト(List)の列挙中にリスト要素を削除するには?[C#、VB]」で詳しく解説している。Eachループ(VB)を書くのが基本だ。List<T>クラスのForEachメソッドを使っても同様な結果が得られる。処理した結果を書き戻すのではなく別の新しいコレクションに格納する場合には、LINQ拡張を使うとよい。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。