gpt4 book ai didi

c# - 通过匿名类型的帮助缩短此 LINQ 查询?

转载 作者:太空狗 更新时间:2023-10-29 18:20:10 25 4
gpt4 key购买 nike

我正在对 MethodInfo[] 进行查询,我试图在其中找到返回类型为 void 且具有 一个特定类型的参数。我想用最简约和最短的方式来做。

一种方法是:

var validMethods = methods.Where(m => m.ReturnType == typeof(void) && m.GetParameters().Length == 1 && m.GetParameters()[0].ParameterType == wantedType);

var validMethods = methods
.Where(m => m.ReturnType == typeof(void))
.Where(m.GetParameters().Length == 1 && m.GetParameters()[0].ParameterType == wantedType);

但是有一个多余的 GetParameters 调用 - 一次调用就足够了。所以我想我可以像这样将其缓存为匿名类型:

var validMethods = methods
.Where(m => m.ReturnType == typeof(void))
.Select(m => new { Params = m.GetParameters() })
.Where(p => p.Length == 1 && p[0].ParameterType == transition.eventType);

但它没有用,我收到错误消息说没有 Length 也没有用于匿名类型 p 的索引器,它是类型 ParameterInfo[]

这是编写此查询的最短方法吗?如果是这样,我怎样才能让匿名类型工作?如果不是,最短的方法是什么? (获取 void 返回的所有方法,以及该参数属于特定类型的一个参数的所有方法)

感谢您的帮助:)

最佳答案

使用查询语法,您可以引入新的范围变量来保存方法参数

from m methods.Where(m => m.ReturnType == typeof(void))
let p = m.GetParameters()
where p.Length == 1 && p[0].ParameterType == wantedType
select m

方法语法不是那么漂亮:

methods.Where(m => m.ReturnType == typeof(void))
.Select(m => new { m, p = m.GetParameters() })
.Where(x => x.p.Length == 1 && x.p[0].ParameterType == wantedType)
.Select(x => x.m);

关于c# - 通过匿名类型的帮助缩短此 LINQ 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20899666/

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