如何为“ Where”扩展方法获取正确的MethodInfo

用户3161050

我试图使用反射返回正确的“ Where”扩展方法,以构建自定义表达式。我已经尝试了几种方法,但是得到的最接近的方法引发了异常:“ mscorlib.dll中发生了'System.Reflection.AmbiguousMatchException'类型的未处理异常”

我知道这是因为在Enumrable类中定义了两个Where方法-但是我怎么能只使用谓词来返回Where方法

 Func<T, bool>. 

我目前所拥有的是:

var collectionType = typeof(TSub);
Type tIEnumerable = typeof(IEnumerable<>).MakeGenericType(collectionType);

MethodInfo methodInfo =
        typeof(Enumerable)
        .GetMethod("Where")                
        .MakeGenericMethod(collectionType);

我也试过了(这个返回null):

MethodInfo methodWhere = typeof(Enumerable).GetMethod("Where", new[] { typeof(TSub )});

和(还返回null)

 MethodInfo methodWhere = typeof(Enumerable).GetMethod("Where", new[] { collectionType })

和(此返回相同的歧义异常)

MethodInfo methodWhere = typeof(Enumerable).GetMethod("Where", BindingFlags.Public |      BindingFlags.Static)

任何人都可以帮忙吗?

谢谢

用户名

我认为,当前的答案(包括已接受的答案)比必要的要复杂得多。如果您有T可以在编译时使用的类型,则可以这样获得MethodInfo

Func<IEnumerable<T>, Func<T, bool>, IEnumerable<T>> whereDelegate = Enumerable.Where;
MethodInfo whereMethodInfo = whereDelegate.Method;

作为一种额外的奖励,这是强烈键入的。只会Enumerable.Where可以解析的情况下进行编译,而不是寻找字符串的任何内容"Where":如果您不小心键入内容"Wehre"则可以正常编译,但在运行时会失败。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为泛型类方法获取正确的扩展方法?

来自分类Dev

如何为vscode选择正确的扩展版本?

来自分类Dev

如何为许多类添加扩展方法?

来自分类Dev

如何为类编写“获取”方法模板

来自分类Dev

如何为函数创建方法?

来自分类Dev

如何为线程创建方法?

来自分类Dev

如何为方法编写rspec

来自分类Dev

如何为每个班级扩展获取唯一的ID?

来自分类Dev

如何为PHP 5安装ClamAV扩展?

来自分类Dev

如何为UseStaticFiles引入更多扩展

来自分类Dev

如何为行表扩展选择行?

来自分类Dev

如何为ActiveRecord扩展gem编写测试

来自分类Dev

如何为Hashset创建扩展unionWith

来自分类Dev

如何为Python编译C扩展

来自分类Dev

如何为Ubuntu 16.04安装JSON扩展?

来自分类Dev

如何为 iOS 创建 safari 扩展?

来自分类Dev

如何为 knex 设置 postgis 扩展?

来自分类Dev

如何为以下任务获取正确的sql select函数

来自分类Dev

Spring MVC:如何为控制器获取正确的URL?

来自分类Dev

如何为数据表获取正确的查询集

来自分类Dev

如何为googleapi-nodejs-client获取正确的参数

来自分类Dev

如何为我的软盘获取正确的vfat路径转换?

来自分类Dev

如何为使用Java创建的时钟获取正确的输出?

来自分类Dev

如何为 <li> HTML 元素获取正确的 Xpath?

来自分类Dev

如何为 angular 应用程序获取正确的 API 数据?

来自分类Dev

如何为我的软盘获取正确的vfat路径转换?

来自分类Dev

如何为pyq强制使用正确的架构?

来自分类Dev

如何为Argo正确配置卷?

来自分类Dev

如何为移动电源正确充电?