gpt4 book ai didi

c# - 查找并调用通用重载方法

转载 作者:行者123 更新时间:2023-12-02 01:22:33 25 4
gpt4 key购买 nike

如何找到通用重载方法?例如,可查询

public static IQueryable<TResult> Select<TSource , TResult> ( this IQueryable<TSource> source , Expression<Func<TSource , int , TResult>> selector );

我已经寻找了现有的解决方案,它们要么不够通用(基于方法的参数计数等),需要比我更多的参数(需要泛型类型定义或参数),要么只是简单的错误(不考虑嵌套泛型等)

我有定义类类型 - 类型类型、方法名称 - 字符串名称 和参数类型数组(不是泛型定义) - 类型[]类型

到目前为止,我似乎必须通过比较方法的 .GetParameters () 的(通用类型树?),将每个预期方法的 .GetGenericArguments() 映射到特定类型。选择 (p=>p.ParameterType) 以及 types 数组中的相应项,从而推导出该方法的泛型参数,因此我可以 .MakeGenericMethod它。

对于这项任务来说,这似乎有点太复杂了,所以也许我对整个事情想得太多了。

有什么帮助吗?

最佳答案

是的,你基本上要把所有的方法都看一遍。仅通过指定类型参数的数量等来直接获取泛型方法是没有办法的。

但是,您可以使用的一件事是,具有除泛型之外的相同签名的重载仅由数量的泛型类型参数重载。您不能使用约束或类型参数名称来实现:

 void Foo<T1>(String x)
void Foo<T2>(String y)

等等

是的,这一切都非常复杂。如果我是你,我会尽力避免这样做。

关于c# - 查找并调用通用重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1887771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com