所以我一直在使用LINQ,我有一个问题。
我有一组对象。它们根据其属性值分为两类。我需要为一个组设置一个不同的属性,为另一个组设置一种方式:
foreach(MyItem currentItem in myItemCollection)
{
if (currentItem.myProp == "CATEGORY_ONE")
{
currentItem.value = 1;
}
else if (currentItem.myProp == "CATEGORY_TWO")
{
currentItem.value = 2;
}
}
或者,我可以做类似的事情:
myItemCollection.Where(currentItem=>currentItem.myProp == "CATEGORY_ONE").ForEach(item=>item.value = 1);
myItemCollection.Where(currentItem=>currentItem.myProp == "CATEGORY_TWO").ForEach(item=>item.value = 2);
我认为第一个更快,但认为检查不会有什么坏处。
答案 0 :(得分:6)
只遍历集合一次(并且不调用任何委托,而不是使用尽可能多的迭代器)可能会稍微快一点,但我非常怀疑它是否会很重要。
编写完成工作的最易读的代码,只有在出现问题时才会担心微观层面的性能(即容易更改的位置)。
我认为在这种情况下,第一段代码更具可读性。更少LINQy,但更具可读性。
答案 1 :(得分:4)
这样做怎么样?
myItemCollection.ForEach(item => item.value = item.myProp == "CATEGORY_ONE" ? 1 : 2);
答案 2 :(得分:3)
只有一个分析器才会真正告诉你哪一个更快。
第一个在原始速度方面很可能更快。
有两个原因真正的问题是“两种解决方案之间的速度差异是否重要?”这是与您的应用程序相关的唯一问题。只有分析才能真正为您提供大量数据。