如果我有一个收藏品:
List<T> collection;
我需要对这个集合进行两次测试,效率更高:
foreach(T t in collection.where(w => w.value == true))
{
t.something = true;
}
foreach(T t in collection.where(w => w.value2 == true))
{
t.something2 = true;
}
或者
foreach(T t in collection)
{
if (t.value == true)
{
//check 1
}
if (t.value2 == true)
{
//check 2
}
}
我认为这将是后来因为我认为每个where
将迭代集合但只是想确定我没有错过什么?
答案 0 :(得分:3)
我认为它可能会根据收藏大小而改变。但是我会使用第二个代码。
第一个代码迭代整个集合两次(每where
一个),然后迭代每个结果一次。
第二个代码只迭代整个集合。而且,它更干净。
答案 1 :(得分:3)
第二个很可能会稍快一点,但差别很小。
更重要的是你以不同的顺序做事。第一个代码首先循环执行一个条件的所有项目,然后再次作用于另一个条件。第二个代码循环遍历项目,依次检查每个项目的两个条件。根据您对项目的处理方式,这可能会有所不同。
答案 2 :(得分:2)
第一种情况枚举您的收藏两次(使用WhereEnumerator
为您进行检查),第二次仅列举一次,但您必须手动进行检查。后一种情况也会更有效,因为您使用简单的条件表达式来比较项目值,而WhereEnumerator
必须在每个项目上调用提供的委托。