多个LINQ Where vs foreach on List <t> </t>

时间:2012-11-22 14:52:50

标签: c# linq foreach

如果我有一个收藏品:

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将迭代集合但只是想确定我没有错过什么?

3 个答案:

答案 0 :(得分:3)

我认为它可能会根据收藏大小而改变。但是我会使用第二个代码。

第一个代码迭代整个集合两次(每where一个),然后迭代每个结果一次。

第二个代码只迭代整个集合。而且,它更干净。

答案 1 :(得分:3)

第二个很可能会稍快一点,但差别很小。

更重要的是你以不同的顺序做事。第一个代码首先循环执行一个条件的所有项目,然后再次作用于另一个条件。第二个代码循环遍历项目,依次检查每个项目的两个条件。根据您对项目的处理方式,这可能会有所不同。

答案 2 :(得分:2)

第一种情况枚举您的收藏两次(使用WhereEnumerator为您进行检查),第二次仅列举一次,但您必须手动进行检查。后一种情况也会更有效,因为您使用简单的条件表达式来比较项目值,而WhereEnumerator必须在每个项目上调用提供的委托。