System.Reflection.AmbiguousMatchException:'发现模糊匹配。

时间:2019-05-10 18:29:07

标签: c# .net-core

我正在尝试从方法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

2 个答案:

答案 0 :(得分:4)

仅当您要查找没有参数的函数时,传递空对象数组才有效。相反,您需要使用将参数类型指定为类型数组的different overload of GetMethod。这样,您可以通过指定应查找的参数类型来告诉它要获取哪个引用。

答案 1 :(得分:1)

您可以使用GetMethods(复数!)来获取所有匹配方法的数组。然后寻找具有IsGenericMethod的方法:

var tm = typeof(OrmLiteSchemaApi)
        .GetMethods()
        .Where(x => x.Name == "TableExists")
        .FirstOrDefault(x => x.IsGenericMethod);

我建议您不要使用参数说明符,因为它会为您提供一个对象,您可以在调试时逐步解决它。