如何使用反射找到特定的通用重载?

2023-12-12

我正在尝试创建一个Expression这将调用特定的通用重载方法(Enumerable.Average在我的第一个测试用例中)。然而,具体的类型绑定直到运行时才知道,所以我需要使用Reflection找到并创建正确的通用方法(Expression是从解析的文本创建的)。

因此,如果我在运行时知道我想要找到这个特定的重载:

public static double Average<TSource>(this IEnumerable<TSource> source, Func<TSource, int> selector)

我该如何解决这个特定问题MethodInfo使用反射?

到目前为止,我有以下选择声明:

MethodInfo GetMethod(Type argType, Type returnType)
{
    var methods = from method in typeof(Enumerable).GetMethods(BindingFlags.Public | BindingFlags.Static)
      where method.Name == "Average" &&
      method.ContainsGenericParameters &&                              
      method.GetParameters().Length == 2 &&
      // and some condition where method.GetParameters()[1] is a Func that returns type argType
      method.ReturnType == returnType
      select method;

      Debug.Assert(methods.Count() == 1);
      return methods.FirstOrDefault();
}

上面将其范围缩小到三个重载,但我想反思并找到需要Func<TSource, int> where argType == typeof(int).

我很困惑,感谢任何帮助。


你需要使用MethodInfo.MakeGenericMethod罢工>

编辑:好的,我误解了这个问题......这个方法应该做你想做的事:

MethodInfo GetMethod(Type argType, Type returnType)
{
    var enumerableType = typeof(IEnumerable<>).MakeGenericType(new Type[] { argType });
    Console.WriteLine(enumerableType);
    var methods = from method in typeof(Enumerable).GetMethods(BindingFlags.Public | BindingFlags.Static)
      let parameters = method.GetParameters()
      let genParams = method.GetGenericArguments()
      where method.Name == "Average" &&
      method.ContainsGenericParameters &&                              
      parameters.Length == 2 &&
      parameters[1].ParameterType.GetGenericTypeDefinition() == typeof(Func<,>) &&
      parameters[1].ParameterType.GetGenericArguments()[1] == argType &&
      method.ReturnType == returnType
      select method;

      return methods.FirstOrDefault();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用反射找到特定的通用重载? 的相关文章

  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • 关于Java泛型的一些问题

    假设我有以下接口和实现类 interface Foo
  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • C# 开源 NMEA 解析器 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 C 开源 NMEA 解析器 嗯 我自己也不熟悉 但是一些快速搜索显示了一个代码项目 htt
  • Kotlin 中扩展函数的多态性

    我有几个我无法控制的课程 我已经在几个常见的 属性 上创建了几个同名的扩展方法 名称相同的扩展函数始终返回相同的值类型 尽管针对每种类型的接收器以不同的方式计算 这里有一个简化的基于仅一个属性的内置类型的示例 DOES NOT COMPIL
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 在 asp.net MVC 中使用活动目录进行身份验证

    我想使用活动目录对我的 asp net mvc 项目中的用户进行身份验证 在网上冲浪了几个小时后 我没有找到任何对我有用的东西 我已经看到了所有结果 但什么也没有 我尝试按照许多帖子的建议编辑我的 web config 如果有人可以帮助我提
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr

随机推荐

  • PHP:使用 PDO 从 MySQL 数据库输出 utf8 时出现问题

    dbo new PDO mysql host localhost dbname database databaseuser databasepassword array PDO MYSQL ATTR INIT COMMAND gt SET
  • Oracle:模糊查找

    我正在加载一个表来查找员工表 但是 有时源文件和员工表中的名称不正确匹配 Employee table Employee Name Paul Jaymes Source File Paul James 我想要这个匹配 可能有什么解决办法 U
  • 小阵列最快的偏移读取

    为了速度 我想读取第 9 个寄存器中的值引用的 8 个寄存器之一 我认为执行此操作的最快方法是使用 3 个条件跳转 检查第 9 个中的 3 位 登记 这应该比使用偏移量执行此操作的标准方法具有更短的延迟 内存读取 但这仍然需要至少 6 个时
  • 如何将基类型列表转换为派生类型列表

    从派生类到基类 似乎存在许多相反的问题 但我的问题是如何将基类型列表转换为派生类型列表 public class MyBase public int A public class MyDerived MyBase public int B
  • 删除空格和句点

    我无法让这个正则表达式工作 4 182 ex number period 2 blank spaces 3 numbers blank space 2 characters 正则表达式语法应返回 4182 并删除句点 空格和字符 你能帮我吗
  • 从 ArrayList 中删除多个元素的快速算法

    假设 ArrayList 的大小为 n 就我而言 我经常需要从 ArrayList 中删除 1 到 n 个具有不同索引的元素 通过使用 VisualVM Profiler 我发现 ArrayList remove 花费了大约 90 的运行时
  • 如何在按客户分组中添加计数器

    他们是同一个专栏 Name Category A SL B SL C SL A SL A SL C SL 现在在我的脚本中 我将它们分组在类别中 但我想计算它们在查询中出现的次数 请看下面 Customer Line A 1 means i
  • 对sync_fetch_and_add_4的未定义引用

    每当我尝试使用 sync fetch and add在 64 位机器上使用 m32 时 我收到以下错误 而它在正常的 64 位机器上可以正常编译 我使用的是 gcc 编译器 4 1 2 这里可能存在什么问题以及解决方案是什么 replica
  • PDF 转文本工具还是 Java 库? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我需要将 PDF 转换为普
  • 具有相同输入大小的快速和非常慢的 scipy.signal.resample

    根据文档scipy signal resample 速度应根据长度而变化of input 如前所述 重新采样使用 FFT 变换 如果输入样本数量很大且为素数 则该变换可能会非常慢 请参阅 scipy fftpack fft 但我的时间安排非
  • 错误:参数类型“字符串?”无法分配给参数类型“String”,因为“String?”可以为空并且“字符串”不是[重复]

    这个问题在这里已经有答案了 再会 我一直在尝试以下代码 import dart io main print write your birth year var birthyear stdin readLineSync var birthye
  • 是否可以在 android 2.x 中制作一个看起来像 Android 4 中的 EditText 的 EditText?

    是否有可能制作一个EditText在 android 2 x 中 看起来像EditText从安卓4开始 我的意思是蓝色背光 下方有凸缘边缘 如果您不想使用外部库 可以使用以下代码 添加以下代码到res values styles xml 之
  • JPA 中referencedColumnName 的用途是什么?

    JPA中有一个属性叫做referencedColumnName可以设置为 JoinColumn PrimaryKeyJoinColumn这个设置背后的想法是什么 有人可以举一个很好的例子来说明它可以在哪里使用吗 它可以指定另一列作为默认值i
  • 选择“全部”选项并取消选择“全部”

    我有如下场景 我想要实现的是 当用户点击All然后应选择所有选项 当用户单击All再次 所有选项都将被取消选择 If All选项已选中 并且用户单击除All then All并单击的复选框将被取消选择 当用户一一选择4个选项时 则应选择全部
  • Firebase 查询“IN”限制为 10 是否有解决方法?

    我有一个 Firebase 查询 其中包含一组大小 gt 10 的 ID Firebase 对一个会话中查询的记录数有限制 有没有办法一次查询10个以上 未处理的承诺拒绝 FirebaseError 无效的查询 in 过滤器支持值数组中最多
  • 是否可以在不使用 jsp:include 的情况下将 jspf 文件添加到 jsp 页面?

    我想要实现的是类似于asp net中的母版页的东西 我正在关注一个tutorial 但我可能错过了一些东西 因为我已将 header jspf 和 footer jspf 添加到 WEB INF jspf 文件夹 而 index jsp 位
  • 使用 iTunes 12 安装 IPA

    我有一个签署用于临时分发的 IPA 我可以用 Flash Builder 很好地安装它 不过 我想通过 iTunes 12 安装发行版本 将其拖到 设备名称 应用程序部分 应用程序列表 主屏幕部分 不起作用 有谁知道如何使用新的 iTune
  • Julia:最小化具有多个参数的函数 (BFGS)

    我正在尝试使用 BFGS 算法 使用 Optim jl 库最小化具有多个参数的函数 在 Optim 库的 GitHub 网站上 我找到了以下工作示例 using Optim rosenbrock x 1 0 x 1 2 100 0 x 2
  • 将连接池与 Jedis 一起使用

    我正在使用 Jedis 与 REST 服务中的 Redis 服务器连接 当我调用网络服务时 我想做这样的操作jedis hmget jedis 退出 and hgetALL 例如 jedis hmget employee data emp
  • 如何使用反射找到特定的通用重载?

    我正在尝试创建一个Expression这将调用特定的通用重载方法 Enumerable Average在我的第一个测试用例中 然而 具体的类型绑定直到运行时才知道 所以我需要使用Reflection找到并创建正确的通用方法 Expressi