如何处理if语句?

时间:2014-04-18 13:32:44

标签: c#

我正在尽可能地优化我的代码,对我而言,这意味着最大限度地减少执行的计算量。我有:

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>

2 个答案:

答案 0 :(得分:9)

C#中有ANDOR两种类型:

& / |将始终检查条件的双方。

  

&amp; operator 评估两个运算符,而不管第一个值

     来自& Operator (C# Reference)

&& / ||不会检查右侧是否可以仅使用左侧评估最终结果。

  

条件AND运算符(&amp;&amp;)执行其bool操作数的逻辑AND,但仅在必要时计算其第二个操作数。

     来自&& Operator (C# Reference)

  

条件OR运算符(||)执行其bool操作数的逻辑或。 如果第一个操作数的计算结果为true,则不评估第二个操作数。

     来自|| Operator (C# Reference)

答案 1 :(得分:7)

使用||&&

时,C#执行短路逻辑

你的逻辑线:

 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)){
 ...
 }

然而,关于代码的可读性有一些说法可以节省几乎没有任何性能。与编码中的任何内容一样,这完全取决于上下文。