.net 方法二义性时如何获取带泛型参数的静态方法的MethodInfo?[duplicate]

1l5u6lss  于 2023-03-04  发布在  .NET
关注(0)|答案(2)|浏览(144)
    • 此问题在此处已有答案**:

GetMethod for generic method [duplicate](2个答案)
9小时前关门了。
我想得到的方法是可观测的。从系统返回。React式
它的定义是这样的:

public static IObservable<TResult> Return<TResult>(TResult value)
{
    ...
}

我试过

Type observableType = typeof(Observable);
MethodInfo returnMethodInfo = observableType.GetMethod("Return");
var genericMethodInfo = returnMethodInfo.MakeGenericMethod(typeof(int));

问题是,我收到一条错误消息:
找到不明确的匹配项。
我猜是因为还有一个方法叫"Return":

public static IObservable<TResult> Return<TResult>(TResult value, IScheduler scheduler)
{
   ...
}

我应该如何调用GetMethod来获取MethodInfo到我想要的方法?

mjqavswn

mjqavswn1#

你可以试试这个解决方案。

var method = typeof(Observable).GetMethods().FirstOrDefault(
            x => x.Name.Equals("Return", StringComparison.OrdinalIgnoreCase) &&
                x.IsGenericMethod && x.GetParameters().Length == 1)
        ?.MakeGenericMethod(typeof(int));
jucafojl

jucafojl2#

您需要使用GetMethods()并过滤到您想要的;这 * 可能 * 就像这样简单:

var returnMethodInfo = observableType.GetMethods().Single(x => x.Name == "Return"
    && x.IsGenericMethodDefinition && x.GetParameters().Length == 1);

相关问题