0

如果我有一个集合:

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人都会迭代集合,但只是想确保我没有遗漏什么?

4

3 回答 3

3

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

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

第二个代码只迭代整个集合一次。此外,它更清洁。

于 2012-11-22T14:54:14.197 回答
3

第二个很可能会稍微快一些,但差异很小。

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

于 2012-11-22T14:59:05.960 回答
2

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

于 2012-11-22T14:58:30.390 回答