C# 汎用メソッド: 変数型パラメーターの柔軟な使用
C# で DoesEntityExist<T>
(T は IGloballyIdentifiable インターフェイスに準拠する型を表します) などのジェネリック メソッドを使用する場合、変数型を使用してジェネリック型パラメーター (たとえば、 Type t = entity.GetType();
として) 間違いです。これは、C# ジェネリックではコンパイル時に型情報を認識する必要があるためです。
リフレクションメカニズムを使用する
この制限を克服するには、リフレクション メカニズムを使用できます。この手法には、ジェネリック メソッドに関連付けられた MethodInfo オブジェクトで GetMethod メソッドと MakeGenericMethod メソッドを呼び出すことが含まれます。これにより、型パラメーターが実行時にのみ判明する場合でも、型パラメーターを動的に提供できます。
<code class="language-csharp">MethodInfo method = GetType().GetMethod("DoesEntityExist") .MakeGenericMethod(new Type[] { t }); method.Invoke(this, new object[] { entityGuid, transaction });</code>
メソッドの汎用性を向上させる
もう 1 つの方法は、呼び出しメソッド自体を変更してジェネリック メソッドにし、必要な型パラメーターをパラメーターとして渡すことができるようにすることです。これにより、型選択の決定がより高いレベルに引き上げられ、後続のメソッド呼び出しが簡素化されます。
補足説明
より具体的なガイダンスを提供するには、問題に関するより詳しいコンテキスト情報を提供することが最善です。場合によっては、リフレクションの使用が必要になる場合がありますが、ジェネリック型の使用を戦略的に計画することで、その再利用を最小限に抑えることができます。リフレクションのタイミングを慎重に選択することで、型パラメーターが動的に 1 回だけ指定されるようになり、ダウンストリーム コードで型パラメーターをシームレスに使用できるようになります。
以上がC# のジェネリック メソッドでジェネリック型の引数を動的に指定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。