C#反射和方法模糊

时间:2014-09-11 15:25:45

标签: c# generics reflection ambiguity

我有一个包含类的程序集。该类有两种方法

public IEnumerable Invoke();
public IEnumerable<T> Invoke<T>();

我动态加载程序集

Assembly as = Assembly.Load("MyAssemblyName, Version= 6.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")
Type type = as.GetType("MyClass");
object myObject= Activator.CreateInstance(type);

IEnumerable test= (IEnumerable)myObject.GetType().InvokeMember("Invoke", BindingFlags.InvokeMethod, null, myObject, null);

我希望调用此方法:public IEnumerable Invoke();

当我运行程序时出现错误:找到了模糊的匹配

那么需要做些什么才能消除歧义,所以要调用非泛型方法?

提前致谢。

1 个答案:

答案 0 :(得分:8)

您可以通过调用GetMethods找到该方法,并检查ContainsGenericParameters是否为false。您也可以选择将参数计数检查为零。

var method = yourType.GetMethods()
    .Where(x => x.Name == "Invoke")
    .First(x => !x.ContainsGenericParameters);
method.Invoke(myObject, null);