Linq方法体最佳实践问题

时间:2010-03-11 22:13:11

标签: c# linq

这两个陈述中的哪一个是更快/更好的做法?

myList.Where(x =>
            {
                bool itemOne= x.ItemOne == paramItemOne;
                bool itemTwo = x.ItemTwo == paramItemTwo;
                return itemOne && itemTwo;
            })


myList.Where(x => x.ItemOne == paramItemOne).Where(x=>x.ItemTwo == paramItemTwo)

或者它们是一样的吗?

4 个答案:

答案 0 :(得分:7)

我不会说。最快的将是:

myList.Where(x => x.ItemOne == paramItemOne && x.ItemTwo == paramItemTwo)

(假设编译器/ JIT没有优化第一种形式的变量赋值)

第二种形式会更慢,因为它可能会对提供给Where语句的委托进行更多的方法调用。

答案 1 :(得分:1)

结果是一样的,但是,我建议你写这个:

myList.Where(x =>
            {
                return x.ItemOne == paramItemOne && x.ItemTwo == paramItemTwo;
            });

这可以保证更快地运行,因为如果x.ItemTwo == paramItemTwo

,现在甚至不会计算x.ItemOne == paramItemOne

答案 2 :(得分:0)

表现相同或非常接近。第二个可能有更多的方法开销。

比性能更重要的是,我会说第一个是更好的做法,因为更清晰

答案 3 :(得分:0)

首先检查每个列表项的两个条件。 第二个按第一个条件过滤,然后按第二个条件过滤结果。

第二个是创建和填充另一个临时集合,但对第二个条件的比较较少。

相关问题