我有两个功能:
public void DeleteRecord(int id);
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 });
第一行抛出异常,因为它找到了一个模糊的定义。有没有办法可以在不使用MethodInfo
的情况下获取通用方法的GetMethods
并循环查询要求IsGenericMethod
的结果?
编辑: 请删除“重复”&#39;因为这两个建议的答案要么用内循环解决这个问题(GetMethods()。选择......),要么甚至不解决重载问题。
答案 0 :(得分:0)
也许不是您问题的确切解决方案,但也许您可以对此解决方案感到满意:
var generic = typeof(BadFoo).GetMethods().FirstOrDefault(p => p.IsStatic == true && p.Name == "DeleteRecord" && p.ReturnType == typeof(Int32));
我认为方法会有一个“FullName”,因此GetMethod()
可以是带有FullName的calles来获取唯一的Method。但是方法中没有其他属性而不是名称。