当类型参数在编译时未知,但在运行时动态获取时,调用泛型方法的最佳方法是什么
考虑以下示例代码-在Example()方法中,调用GenericMethod<;T>;()使用myType变量中存储的Type
公共类示例
{
公共void示例(字符串类型名)
{
类型myType=FindType(类型名称);
//这里什么叫做GenericMethod<;T>;()?
GenericMethod<;myType>;();//这不起作用
//调用StaticMethod<;T>;()有哪些更改?
Sample.StaticMethod<;myType>;();//这也不起作用
}
公共无效通用方法<;T>;()
{
// ...
}
公共静态无效静态方法<;T>;()
{
//...
}
}
您需要使用反射来获取要启动的方法,然后通过使用MakeGenericMethod提供类型参数来“构造”它:
MethodInfo-method=typeof(Sample.GetMethod)(nameof(Sample.GenericMethod));
MethodInfo generic=method.MakeGenericMethod(myType);
generic.Invoke(this,null);
对于静态方法,将null作为第一个参数传递给Invoke。这与泛型方法无关——它只是普通的反射
如前所述,对于C#4来说,使用动态,这一点要简单得多——当然,如果可以使用类型推断的话。在类型推断不可用的情况下,例如问题中的确切示例,它没有帮助