我正在尝试从方法MethodInfo
中获取TableExists<T>
,以便可以用一种类型来调用它。
该方法在OrmLiteSchemaApi
类内声明。有2个重载:
public static bool TableExists<T>(this IDbConnection dbConn)
{
// code omitted
}
public static bool TableExists(this IDbConnection dbConn, string tableName, string schema = null)
{
// code omitted
}
我正在尝试像这样获得MethodInfo
:
var tableMethod = typeof(OrmLiteSchemaApi).GetMethod("TableExists");
但是会生成异常:
System.Reflection.AmbiguousMatchException:'发现了模糊匹配。'
我只能找到一个与此相关的旧问题,建议将一个空对象数组作为参数传递,但这似乎不适用于.net核心。
我想我需要指定特定的重载,但我不确定具体如何。
我如何获得MethodInfo
?
答案 0 :(得分:4)
仅当您要查找没有参数的函数时,传递空对象数组才有效。相反,您需要使用将参数类型指定为类型数组的different overload of GetMethod。这样,您可以通过指定应查找的参数类型来告诉它要获取哪个引用。
答案 1 :(得分:1)
您可以使用GetMethods
(复数!)来获取所有匹配方法的数组。然后寻找具有IsGenericMethod
的方法:
var tm = typeof(OrmLiteSchemaApi)
.GetMethods()
.Where(x => x.Name == "TableExists")
.FirstOrDefault(x => x.IsGenericMethod);
我建议您不要使用参数说明符,因为它会为您提供一个对象,您可以在调试时逐步解决它。