另一个Linq翻译问题

时间:2010-01-28 19:22:24

标签: c# linq

好的,所以我正在迭代一个集合。对于满足某些条件的每个成员,我想在该成员上调用一个方法:

以下是我现在的做法:


foreach(MyObject obj in myCollection)
{
  if(obj.Property == theSearchValue)
    obj.DoIt();
}

对于它的价值,我认为foreach是最可读,最清晰的方法(我们可以谈谈花括号的细节),所以这对我来说更像是一个学术/学习问题。

问题:用Linq表达这一点的最佳方式是什么?是否有一种Linqy方法可以比我的foreach循环更清晰/可读/可维护?如果是这样,它是否会在不牺牲性能的情况下这样做?

(我看到很多linq操作看起来整洁而且全部,但是它们经常导致创建中间枚举,或者有时多次枚举一个集合 - 我的小foreach解决了1遍中的问题,没有临时收藏创建。)

2 个答案:

答案 0 :(得分:5)

使用LINQ ...

你将无法获得多少收益
var matches = myCollection.Where(i => i.Property == theSearchValue);

foreach(var item in matches)
    item.DoIt();

您还可以使用扩展方法添加Each()方法来隐藏循环(但您无法获得效率)。生成的代码如下所示:

myCollection.Where(i => i.Property == theSearchValue).Each(i => i.DoIt());

答案 1 :(得分:2)

foreach (MyObject obj in 
                    myCollection.Where(item => item.Property == theSearchValue))
    obj.DoIt();