C#反射和方法模糊

0 c# generics reflection ambiguity

我有一个包含类的程序集.那个班有两种方法

public IEnumerable Invoke();
public IEnumerable<T> Invoke<T>();
Run Code Online (Sandbox Code Playgroud)

我动态加载程序集

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);
Run Code Online (Sandbox Code Playgroud)

我希望这个方法被调用:public IEnumerable Invoke();

当我运行该程序时,我收到一个错误:找到了模糊的匹配

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

提前致谢.

Sri*_*vel 8

你可以通过调用找到方法GetMethods,check ContainsGenericParameters是false.您也可以选择将参数计数检查为零.

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