ここで説明するように、リフレクションを使用してこれを行うことができるはずです
リンクが停止しているため、ウェイバックマシンに関連する詳細が見つかりました。
静的なジェネリックメソッドを持つクラスがあるとします。
class ClassWithGenericStaticMethod
{
public static void PrintName<T>(string prefix) where T : class
{
Console.WriteLine(prefix + " " + typeof(T).FullName);
}
}
リレーションを使用してこのメソッドをどのように呼び出すことができますか?
非常に簡単であることがわかります…これが、リフレクションを使用して静的ジェネリックメソッドを呼び出す方法です。
// Grabbing the type that has the static generic method
Type typeofClassWithGenericStaticMethod = typeof(ClassWithGenericStaticMethod);
// Grabbing the specific static method
MethodInfo methodInfo = typeofClassWithGenericStaticMethod.GetMethod("PrintName", System.Reflection.BindingFlags.Static | BindingFlags.Public);
// Binding the method info to generic arguments
Type[] genericArguments = new Type[] { typeof(Program) };
MethodInfo genericMethodInfo = methodInfo.MakeGenericMethod(genericArguments);
// Simply invoking the method and passing parameters
// The null parameter is the object to call the method from. Since the method is
// static, pass null.
object returnValue = genericMethodInfo.Invoke(null, new object[] { "hello" });