假设我有一个第三方类Foo,其签名如下:
void Execute<T>();
void Execute(string[] args);
而不是打电话
Execute<Bar>();
我需要使用Bar类的限定名称来调用泛型方法。例子:
Type barType = Type.GetType("Program.Bar");
Execute<barType>();
我已经尝试过在其他线程上找到的一些答案,但是所有这些都给我带来了问题。例如,我不能使用GetMethod(“ Execute”),因为它抛出了一个模棱两可的专有名词。
您可以这样运行它:
class A
{
public void Execute<T>() { }
public void Execute(string[] args) { }
}
var method = typeof(A).GetMethods().FirstOrDefault(
m => m.Name == "Execute"
&& !m.GetParameters().Any()
&& m.GetGenericArguments().Count() == 1
);
Type barType = Type.GetType("Program.Bar");
method.MakeGenericMethod(barType).Invoke();
您可以更改FirstOrDefault
为First
,也可以添加一些错误处理(如果需要的话null
)(取决于您的用例)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句