c#ジェネリックスクランメソッドのダイナミックタイプパラメーターを実行
c#で一般的なメソッドを使用する場合、コンパイル時にタイプパラメーターが不明であり、実行時に取得する必要がある場合があります。この記事では、この場合の一般的な方法を呼び出すベストプラクティスについて説明します。
次のコード例を検討します。ここで、
メソッドは、ランタイム変数から取得した型パラメーターを使用して、汎用メソッドを呼び出します。 Example
myType
例に示すように、コンパイラがコンパイル中に型パラメーターを推測できないため、GenericMethod<T>
<code class="language-csharp">public class Sample { public void Example(string typeName) { Type myType = FindType(typeName); GenericMethod<myType>(); // 这行代码无法编译通过 StaticMethod<myType>(); // 这行代码也无法编译通过 } public void GenericMethod<T>() { // ... } public static void StaticMethod<T>() { // ... } }</code>
現在のタイプからメソッドを取得し、指定された型パラメーターを使用して汎用メソッド仕様を構築するGenericMethod<myType>
メソッド。最後に、コンストラクターの一般的な方法を呼び出すためにが使用されます。
<code class="language-csharp">MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod)); MethodInfo generic = method.MakeGenericMethod(myType); generic.Invoke(this, null);</code>
GetMethod
として渡されます。これは一般的な方法とは関係ありませんが、反射を通じて静的方法を呼び出す方法のみを反映しています。 MakeGenericMethod
C#4以上のバージョンでは、タイプの推論が可能な場合、このプロセスをさらに簡素化するために動的呼び出しを使用できますが、これは必ずしもそうではありません。反射によって提供されるソリューションは、動的型パラメーターを使用してジェネリックメソッドを呼び出すための信頼できる方法です。 Invoke
以上が実行時に動的型パラメーターを使用して、C#でジェネリックメソッドを呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。