我正在这样过滤PropertyInfo
列表:
foreach (PropertyInfo propertyInfo in
ClassUtils.GetProperties(patternType).
Where(pi => pi.GetCustomAttribute<TemplateParamAttribute>() != null).
OrderBy(pi1 => pi1.GetCustomAttribute<TemplateParamAttribute>().Order))
{
TemplateParamAttribute attr = propertyInfo.GetCustomAttribute<TemplateParamAttribute>();
...
这可以正常工作,但是在每次迭代中我对3个
GetCustomAttribute
调用都不满意。有没有办法减少GetCustomAttribute
调用的数量(并且仍然使用linq)? 最佳答案
有没有一种方法可以减少GetCustomAttribute调用的次数(仍然使用linq)?
绝对-尽早进行投影。为了提高可读性,我会在foreach循环之前声明的查询中执行此操作:
var query = from property in ClassUtils.GetProperties(patternType)
let attribute = property.GetCustomAttribute<TemplateParamAttribute>()
where attribute != null
orderby attribute.Order
select new { property, attribute };
foreach (var result in query)
{
// Use result.attribute and result.property
}
关于c# - 在LINQ查询中设置和使用值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14318765/