当在编译时未知类型参数但是在运行时动态获取时,调用泛型方法的最佳方法是什么?考虑以下示例代码 - 在Example()方法内部,GenericMethod<T>()使用Type存储在myType变量中调用的最简洁方法是什么?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>() { //... }}
4 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
您需要使用反射来获取方法,然后通过使用MakeGenericMethod提供类型参数来“构造”它:
MethodInfo method = typeof(Sample).GetMethod("GenericMethod");
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);
对于静态方法,将null第一个参数传递给Invoke。这与通用方法无关 - 它只是普通的反射。
如上所述,当C#4使用时,很多这样做更简单dynamic- 当然,如果你可以使用类型推断。在类型推断不可用的情况下(例如问题中的确切示例),它没有帮助。
- 4 回答
- 0 关注
- 1271 浏览
添加回答
举报
0/150
提交
取消