シナリオでは、特定の名前空間内のインターフェイスのコレクションを反復処理し、各インターフェイスのジェネリック メソッドを動的に呼び出します。ただし、コンパイル時に不明な型引数が原因でコンパイル時エラーが発生します。
実行時に既知の型引数を使用してジェネリック メソッドを動的に呼び出すには、次のようにリフレクションを使用できます。
using System; using System.Linq; using System.Reflection; public class TestClass { public static void CallGeneric<T>() { Console.WriteLine($"Generic type: {typeof(T)}"); } public static void Main() { var assembly = Assembly.GetExecutingAssembly(); var interfaces = assembly.GetTypes() .Where(t => t.Namespace == "MyNamespace.Interfaces"); var genericMethod = typeof(TestClass).GetMethod("CallGeneric"); foreach (var interfaceType in interfaces) { var genericMethodInstance = genericMethod.MakeGenericMethod(interfaceType); genericMethodInstance.Invoke(null, null); // No target or arguments needed } } }
この例では:
以上がC# で実行時に決定される型引数を使用してジェネリック メソッドを動的に呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。