我正在尽可能地优化我的代码,对我而言,这意味着最大限度地减少执行的计算量。我有:
for (int i = 0; i < this.Entities.Count; i++)
{
if (this.Entities[i].Type == 2)
{
if (this.Entities[i].X > this.Bounds.Width + this.SideOffset || this.Entities[i].X < -this.SideOffset)
{
this.Entities.Remove(this.Entities[i]);
}
}
}
并且为了优化它我在类型检查中嵌套了越界检查,因此它只在运行检查时运行。我的问题是,如何在C#中处理if语句?是否检查了每个条件,或者我可以将两个if语句放在一个中并使其有效地仍然运行相同(如果this.Entities [i] .Type不等于2则不会运行if语句的其余部分)< / p>
答案 0 :(得分:9)
C#中有AND
和OR
两种类型:
&
/ |
将始终检查条件的双方。
&amp; operator 评估两个运算符,而不管第一个值
来自&
Operator (C# Reference) 的
&&
/ ||
不会检查右侧是否可以仅使用左侧评估最终结果。
条件AND运算符(&amp;&amp;)执行其bool操作数的逻辑AND,但仅在必要时计算其第二个操作数。
来自&&
Operator (C# Reference) 的
条件OR运算符(||)执行其bool操作数的逻辑或。 如果第一个操作数的计算结果为true,则不评估第二个操作数。
来自||
Operator (C# Reference) 的
答案 1 :(得分:7)
使用||
或&&
你的逻辑线:
if (this.Entities[i].X > this.Bounds.Width + this.SideOffset || this.Entities[i].X < -this.SideOffset)
如果先前条件失败, this.Entities[i].X < -this.SideOffset
将无法执行。
你可以做出你的逻辑:
if ( (this.Entities[i].Type == 2) && (this.Entities[i].X > this.Bounds.Width + this.SideOffset || this.Entities[i].X < -this.SideOffset)){
...
}
然而,关于代码的可读性有一些说法可以节省几乎没有任何性能。与编码中的任何内容一样,这完全取决于上下文。