循环有条件的C#

循环有条件的C#

问题描述:

表现在以下这些有更好的表现,如果我们假设,在#1 IF模块将在#多与少2循环有条件的C#

foreach() 
{ 
if 
{ 
block here 
} 
} 

or 

foreach() 
{ 
if !() 
    continue 

} 

我已经结构化的#2取如果执行条件较少。但是,我想知道这是否有必要,甚至有帮助。

+2

应该很容易测试自己。 :) – 2011-01-06 16:47:20

+0

或者你可以使用LINQ并完全删除它。 – 2011-01-06 17:10:02

在每种情况下,都会测试条件。如果条件是“假”,那么在#1中,它将跳到if块的末尾(因此移动到下一个foreach项目),在#2中,它将执行“continue”,它基本上一样。

真/假的频率应该对此没有影响。

它产生几乎完全相同的IL。即使存在差异,如果不能衡量绩效差异,那也是微不足道的。

我会选择一个清洁,而不是性能的愿望。其他开发人员维护代码时往往会忽略'继续'的关键,就像'break'声明一样。在更多详细的包含大量代码的foreach循环中尤其如此。出于这个原因,我更喜欢使用嵌套如果然后做,而不是如果!继续。

这两个代码是等效的。
不要忘记CPU不会运行您的C#代码。
首先你的C#代码将被编译成IL。这两个代码很可能最终会产生相同的IL。
然后,IL将以CPU特定的方式编译为机器代码。
然后,CPU将使用分支预测乱序运行机器代码指令。由于分支预测,'if'很可能会导致零循环。

如果你想要做更多的功能的办法,拉有条件彻底摆脱这样的循环(需要LINQ):

foreach(var item in MyEnumeration.Where(x=> /* conditional on x */)) 
{ 
}