我有一个包含类的程序集。该类有两种方法
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();
当我运行程序时出现错误:找到了模糊的匹配
那么需要做些什么才能消除歧义,所以要调用非泛型方法?
提前致谢。
答案 0 :(得分:8)
您可以通过调用GetMethods
找到该方法,并检查ContainsGenericParameters
是否为false。您也可以选择将参数计数检查为零。
var method = yourType.GetMethods()
.Where(x => x.Name == "Invoke")
.First(x => !x.ContainsGenericParameters);
method.Invoke(myObject, null);