ホームページ > バックエンド開発 > C++ > 実行時に動的型パラメーターを使用して、C#でジェネリックメソッドを呼び出すにはどうすればよいですか?

実行時に動的型パラメーターを使用して、C#でジェネリックメソッドを呼び出すにはどうすればよいですか?

Susan Sarandon
リリース: 2025-02-03 07:52:11
オリジナル
901 人が閲覧しました

How Can I Invoke Generic Methods in C# with Dynamic Type Parameters at Runtime?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート