System.Reflection.AmbiguousMatchException: '找到了不明确的匹配。'

Gue*_*lla 6 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
}
Run Code Online (Sandbox Code Playgroud)

我试图得到MethodInfo这样的:

var tableMethod = typeof(OrmLiteSchemaApi).GetMethod("TableExists");
Run Code Online (Sandbox Code Playgroud)

但它会产生异常:

System.Reflection.AmbiguousMatchException: '找到了不明确的匹配。'

我只能找到一个与此相关的旧问题,该问题建议将空对象数组作为参数传递,但这似乎不适用于 .net 核心。

我想我需要指定特定的重载,但我不确定具体如何。

我如何获得MethodInfo

Dav*_*vid 11

您可以使用GetMethods(复数!)获取所有匹配方法的数组,然后查找具有以下内容的方法IsGenericMethod

var tm = typeof(OrmLiteSchemaApi)
        .GetMethods()
        .Where(x => x.Name == "TableExists")
        .FirstOrDefault(x => x.IsGenericMethod);
Run Code Online (Sandbox Code Playgroud)

我建议这样做而不是使用参数说明符,因为它会给你一个对象,如果有任何问题,你可以在调试时逐步完成。


Lou*_*ron 6

传递空对象数组仅在您寻找没有参数的函数时才有效。相反,您需要使用不同的 GetMethod 重载,将参数类型指定为类型数组。这样你就可以通过指定它应该查找哪些类型的参数来告诉它要获取哪个引用。