動的型引数を使用したジェネリック メソッドの呼び出し
C# では、実行時のみに知られる型引数を使用してジェネリック メソッドを呼び出すには、リフレクション機能を利用する必要があります。元の課題には、特定の名前空間内のインターフェイスをループし、これらのインターフェイスを引数として使用して汎用メソッドを呼び出すことが含まれていました。
これを克服するには、次の手順に従います。
たとえば、次のように考えます。次のコード:
// Get the generic method MethodInfo method = typeof(Test).GetMethod("CallMe"); // Get the list of interfaces in the specified namespace var types = typeof(Test).Assembly .GetTypes() .Where(t => t.Namespace == "Interfaces"); // Loop through the interfaces foreach (Type type in types) { // Create a specialized generic method MethodInfo genericMethod = method.MakeGenericMethod(type); // Invoke the method with no target or arguments genericMethod.Invoke(null, null); }
この例では、「CallMe」ジェネリック メソッドを取得し、インターフェイス タイプごとに特殊なバージョンを作成し、それらをリフレクティブに呼び出します。
注: インターフェイスが扱っている型自体がジェネリックであるため、MakeGenericMethod の代わりに MakeGenericType を使用し、適切な型引数を渡します。
以上がリフレクションを使用して C# で動的型引数を持つジェネリック メソッドを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。