vex*_*exe 8 .net c# linq anonymous-types where
我正在查询MethodInfo[]我正在尝试查找返回类型为的所有方法void,并且只有一个特定类型的参数.我想以最简约和最短的方式做到这一点.
一种方法是:
var validMethods = methods.Where(m => m.ReturnType == typeof(void) && m.GetParameters().Length == 1 && m.GetParameters()[0].ParameterType == wantedType);
Run Code Online (Sandbox Code Playgroud)
要么
var validMethods = methods
.Where(m => m.ReturnType == typeof(void))
.Where(m.GetParameters().Length == 1 && m.GetParameters()[0].ParameterType == wantedType);
Run Code Online (Sandbox Code Playgroud)
但是有一个多余的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);
Run Code Online (Sandbox Code Playgroud)
但它没有工作,我得到了错误说没有Length,也不是一个索引的匿名类型p是类型ParameterInfo[]
这是编写此查询的最短方式吗?如果是这样,我怎么能让匿名类型工作?如果没有,最简单的方法是什么?(获取void返回的所有方法,以及该param属于某种类型的一个param)
谢谢你的帮助 :)
Ser*_*kiy 11
使用查询语法,您可以引入新的范围变量,该变量将保存方法参数
from m methods.Where(m => m.ReturnType == typeof(void))
let p = m.GetParameters()
where p.Length == 1 && p[0].ParameterType == wantedType
select m
Run Code Online (Sandbox Code Playgroud)
方法语法不是很漂亮:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |