如何处理if语句?

use*_*295 1 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]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并且为了优化它,我在类型检查中嵌套了越界检查,因此它仅在运行检查时运行.我的问题是,如何在C#中处理if语句?是否检查了每个条件,或者我是否可以将两个if语句放在一个中并使其有效地运行相同(如果this.Entities [i] .Type不等于2则不会运行if语句的其余部分)

Mar*_*zek 9

有两种类型的AND,并OR在C#:

&/ |将始终检查条件的两个方面.

&运算符评估两个运算符,而不管第一个运算符的值

来自&运营商(C#参考)

&&/ ||如果只能使用左侧评估最终结果,则不会检查右侧.

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

来自&&运营商(C#参考)

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

来自||运营商(C#参考)


T M*_*own 7

使用||或时,C#执行短路逻辑&&

你的逻辑线:

 if (this.Entities[i].X > this.Bounds.Width + this.SideOffset || this.Entities[i].X < -this.SideOffset)
Run Code Online (Sandbox Code Playgroud)

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)){
 ...
 }
Run Code Online (Sandbox Code Playgroud)

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