为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用反射来调用泛型方法?

如何使用反射来调用泛型方法?

达令说 2019-05-21 16:55:35
当在编译时未知类型参数但是在运行时动态获取时,调用泛型方法的最佳方法是什么?考虑以下示例代码 - 在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- 当然,如果你可以使用类型推断。在类型推断不可用的情况下(例如问题中的确切示例),它没有帮助。


查看完整回答
反对 回复 2019-05-21
  • 4 回答
  • 0 关注
  • 1271 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信