好的,所以我正在迭代一个集合.对于满足某些条件的每个成员,我想在该成员上调用一个方法:
我现在就是这样做的:
foreach(MyObject obj in myCollection)
{
if(obj.Property == theSearchValue)
obj.DoIt();
}
对于它的价值,我认为foreach是最可读,最清晰的方法(我们可以谈论花括号的细节),所以这对我来说更像是一个学术/学习问题.
问题:用Linq表达这一点的最佳方法是什么?是否有一种Linqy方法可以比我的foreach循环更清晰/可读/可维护?如果是这样,它是否在不牺牲性能的情况下这样做?
(我看到很多linq操作看起来很整洁,但是它们经常导致创建中间枚举,或者有时多次枚举一个集合 - 我的小foreach在1遍中解决了问题,没有创建临时集合. )
使用LINQ你不会获得太多收益......
var matches = myCollection.Where(i => i.Property == theSearchValue);
foreach(var item in matches)
item.DoIt();
Run Code Online (Sandbox Code Playgroud)
您还可以使用扩展方法添加Each()隐藏循环的方法(但不会获得效率).生成的代码如下所示:
myCollection.Where(i => i.Property == theSearchValue).Each(i => i.DoIt());
Run Code Online (Sandbox Code Playgroud)