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

时间:2013-05-28 13:29:42

标签: c# reflection methodinfo

我有两个功能:

  1. public void DeleteRecord(int id);
  2. public T DeleteRecord<T>(int id);
  3. 以下是我尝试动态调用泛型方法的方法:

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

    第一行抛出异常,因为它找到了一个模糊的定义。有没有办法可以在不使用MethodInfo的情况下获取通用方法的GetMethods并循环查询要求IsGenericMethod的结果?

    编辑: 请删除“重复”&#39;因为这两个建议的答案要么用内循环解决这个问题(GetMethods()。选择......),要么甚至不解决重载问题。

1 个答案:

答案 0 :(得分:0)

也许不是您问题的确切解决方案,但也许您可以对此解决方案感到满意:

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

我认为方法会有一个“FullName”,因此GetMethod()可以是带有FullName的calles来获取唯一的Method。但是方法中没有其他属性而不是名称。