このトピックでは、配列またはコレクションの要素に対して実行される変換、検索述語、およびアクションの汎用デリゲートの概要について説明します。
配列とリストを操作するための汎用デリゲート
Action<T>ジェネリック デリゲートは、指定した型の要素に対して何らかのアクションを実行するメソッドを表します。 要素に対して目的のアクションを実行するメソッドを作成し、そのメソッドを表す Action<T> デリゲートのインスタンスを作成してから、配列とデリゲートを Array.ForEach 静的ジェネリック メソッドに渡すことができます。 このメソッドは、配列のすべての要素に対して呼び出されます。
List<T>ジェネリック クラスには、Action<T> デリゲートを使用するForEach メソッドも用意されています。 このメソッドはジェネリックではありません。
注
これにより、ジェネリック型とメソッドに関する興味深い点が生まれます。
Array.ForEachメソッドは静的 (Visual Basic ではShared
) で、Arrayはジェネリック型ではないためジェネリックである必要があります。Array.ForEach操作する型を指定できる唯一の理由は、メソッドに独自の型パラメーター リストがあることです。 これに対し、非ジェネリック List<T>.ForEach メソッドはジェネリック クラス List<T>に属しているため、そのクラスの型パラメーターを使用するだけです。 クラスは厳密に型指定されているため、メソッドはインスタンス メソッドにすることができます。
Predicate<T>ジェネリック デリゲートは、特定の要素が定義した条件を満たすかどうかを判断するメソッドを表します。 Exists、Find、FindAll、FindIndex、FindLast、FindLastIndex、TrueForAllなど、Arrayの静的ジェネリック メソッドを使用して要素または要素のセットを検索できます。
Predicate<T> また、 List<T> ジェネリック クラスの対応する非ジェネリック インスタンス メソッドでも機能します。
Comparison<T>汎用デリゲートを使用すると、ネイティブの並べ替え順序を持たない配列またはリスト要素の並べ替え順序を指定したり、ネイティブの並べ替え順序をオーバーライドしたりできます。 比較を実行するメソッドを作成し、メソッドを表す Comparison<T> デリゲートのインスタンスを作成し、配列とデリゲートを Array.Sort<T>(T[], Comparison<T>) 静的ジェネリック メソッドに渡します。 List<T>ジェネリック クラスは、対応するインスタンス メソッドのオーバーロードList<T>.Sort(Comparison<T>)提供します。
Converter<TInput,TOutput>ジェネリック デリゲートを使用すると、2 つの型間の変換を定義したり、1 つの型の配列を他方の型の配列に変換したり、一方の型のリストを他方の型のリストに変換したりできます。 既存のリストの要素を新しい型に変換するメソッドを作成し、メソッドを表すデリゲート インスタンスを作成し、 Array.ConvertAll ジェネリック静的メソッドを使用して元の配列から新しい型の配列を生成するか、 List<T>.ConvertAll<TOutput>(Converter<T,TOutput>) ジェネリック インスタンス メソッドを使用して元のリストから新しい型のリストを生成します。
デリゲートのチェーン
これらのデリゲートを使用するメソッドの多くは、配列またはリストを返します。これは別のメソッドに渡すことができます。 たとえば、配列の特定の要素を選択し、それらの要素を新しい型に変換し、新しい配列に保存する場合は、 FindAll ジェネリック メソッドによって返された配列を ConvertAll ジェネリック メソッドに渡すことができます。 新しい要素型に自然な並べ替え順序がない場合は、 ConvertAll ジェネリック メソッドによって返される配列を Sort<T>(T[], Comparison<T>) ジェネリック メソッドに渡すことができます。
こちらも参照ください
.NET