我正在这样过滤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/

10-09 03:06