うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【C#】ジェネリックメソッドをリフレクションで呼び出す

ジェネリックメソッドを呼び出す場合は MethodInfo から MakeGenericMethod を利用して、再度 MethodInfo を取得する必要がある

public class Sample
{
    public void Exec<T>() where T : class
    {
        Debug.Log(typeof(T));
    }
}

例えば上記クラスの Exec メソッドを呼び出したい場合は

// methodInfo を取得
var methodInfo = typeof(Sample).GetMethod(nameof(sample.Exec));
// Generic Method の methodInfo を取得
var genericMethod = methodInfo.MakeGenericMethod(typeof(MonoBehaviour));

とする必要がある

最終的にメソッド呼び出しまでする場合はこのコードになる

var sample = new Sample();
var methodInfo = sample.GetType().GetMethod(nameof(Sample.Exec));
var genericMethod = methodInfo.MakeGenericMethod(typeof(MonoBehaviour));
genericMethod.Invoke(sample, new object[0]);

これを実行すると

UnityEngine.MonoBehaviour

と表示され正しく実行できていることが確認できる