型変数を使用してジェネリックメソッドを呼び出すにはどうすればいいですか? 質問する

型変数を使用してジェネリックメソッドを呼び出すにはどうすればいいですか? 質問する

型パラメータがコンパイル時には不明だが、実行時に動的に取得される場合にジェネリック メソッドを呼び出す最適な方法は何ですか?

次のサンプル コードを検討してください。メソッド内で、変数に格納されているものを使用してExample()呼び出す最も簡潔な方法は何でしょうかGenericMethod<T>()TypemyType

public class Sample
{
    public void Example(string typeName)
    {
        Type myType = FindType(typeName);

        // What goes here to call GenericMethod<T>()?
        GenericMethod<myType>(); // This doesn't work

        // What changes to call StaticMethod<T>()?
        Sample.StaticMethod<myType>(); // This also doesn't work
    }

    public void GenericMethod<T>()
    {
        // ...
    }

    public static void StaticMethod<T>()
    {
        //...
    }
}

ベストアンサー1

まずリフレクションを使ってメソッドを取得し、次に型引数を指定して「構築」する必要があります。ジェネリックメソッドの作成:

MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod));
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);

静的メソッドの場合は、nullの最初の引数として渡しますInvoke。これはジェネリック メソッドとは関係なく、通常のリフレクションです。

前述のように、C# 4 では、型推論を使用できる場合は、これを使用すると、その多くが簡単になりますdynamic。質問の正確な例のように、型推論が利用できない場合は役に立ちません。

おすすめ記事