假设我有第三方类Foo,其签名如下:
void Execute<T>();
void Execute(string[] args);
而不是打电话
Execute<Bar>();
我需要使用Bar classe的限定名来调用泛型方法。 例如:
Type barType = Type.GetType("Program.Bar");
Execute<barType>();
我已经尝试过在其他线程上找到的一些答案,但所有这些答案都给了我一些问题。例如,我无法使用GetMethod(&#34; Execute&#34;),因为它会引发一个模糊的删除。
答案 0 :(得分:0)
必须在编译时知道类型参数,因此为了直接调用该方法,您需要包装类型或更改签名以采用类型。
否则,您将需要使用反射来按名称调用方法。
答案 1 :(得分:0)
您可以像这样运行:
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
时添加一些错误处理(取决于您的使用案例)。