带有Generic重载的Type.GetMethod - 获取Generic MethodInfo而不循环遍历所有方法

Uri*_*son 5 c# reflection methodinfo

我有两个功能:

  1. public void DeleteRecord(int id);
  2. public T DeleteRecord<T>(int id);

以下是我尝试动态调用泛型方法的方法:

MethodInfo method = typeof(DAL).GetMethod("DeleteRecord", new[] { typeof(int) });
MethodInfo generic = method.MakeGenericMethod(returnType);
object o = generic.Invoke(null, new object[] { dbname, spname, expandoAsDictionary });
Run Code Online (Sandbox Code Playgroud)

第一行抛出异常,因为它找到了一个模糊的定义.有没有办法可以获得MethodInfo泛型方法而不使用GetMethods和循环查询结果IsGenericMethod

编辑:请删除'复制',因为两个建议的答案要么用内循环解决这个问题(GetMethods().选择...)或者甚至不解决重载问题.

Joh*_*zek 0

也许不是您问题的确切解决方案,但也许您会对这个解决方案感到满意:

var generic = typeof(BadFoo).GetMethods().FirstOrDefault(p => p.IsStatic == true && p.Name == "DeleteRecord" && p.ReturnType == typeof(Int32));
Run Code Online (Sandbox Code Playgroud)

我认为该方法会有一个“全名”,因此GetMethod()可以使用全名进行调用以获得唯一的方法。但Method中除了Name之外没有其他Property。