嵌套或不嵌套的if-blocks?

我想知道在C#中使用ifs时是否存在性能差异,它们是否嵌套。 这是一个例子:

if(hello == true) { if(index == 34) { DoSomething(); } } 

这比这更快还是慢:

 if(hello == true && index == 34) { DoSomething(); } 

有任何想法吗?

编译器可能足够聪明,可以为两个版本生成相同或非常相似的代码。 除非性能确实是您应用程序的关键因素,否则为了代码可读性,我会自动选择第二个版本。

更好的是

 if(SomethingShouldBeDone()) { DoSomething(); } 

……同时在城市的另一个地方……

 private bool SomethingShouldBeDone() { return this.hello == true && this.index == 34; } 

在99%的现实生活中,这对性能影响很小或没有影响,并且只要你有意义地命名,它就会更容易阅读,理解和(因此)维护。

使用最可读且仍然正确的(有时在布尔表达式周围玩杂耍会让你有不同的行为 – 特别是如果涉及短路)。 执行时间将相同(或过于接近)。

只是为了记录,有时我发现嵌套更具可读性(如果表达式太长或者组件太多),有时我发现它的可读性较差(如在你的简短示例中)。

任何现代编译器,我的意思是在过去20年中构建的任何东西,都会将这些编译器编译成相同的代码。

至于你应该使用哪个,那么它取决于项目上下文中哪个更具可读性和逻辑性。 一般来说,我会自己选择第二个,但这会有所不同。

值得考虑的一个重点是维护。 我追捕的一个比较常见的错误是在嵌套ifs块的中间悬挂if / else。 如果你有一系列复杂的if else条件,这些条件已被不同的程序员在一段时间内修改 – 通常是几年。 例如,对于一个简单的案例使用伪代码:

 IF condition_a IF condition_b Do something ELSE Do something END IF ELSE IF condition_b Do something END IF END IF 

你会注意到组合!condition_a &&!condition_b代码将通过无条件的条件。 这对于这两个条件来说很容易找到,但是一旦你有3个,4个或更多if / else条件要检查就很容易错过。 通常发生的是嵌套结构在第一次编码时是正确的,但在稍后的某些时候变得不正确(就业务输出而言),因为维护程序员不会理解或允许全部选项。

因此,随着时间的推移,使用if结构中的组合条件进行编码通常会更加健壮,采用最可行的可行结构并将嵌套保持在最小值,因此使用您的示例,因为没有逻辑上的理由不将这两个条件组合成单个语句然后你应该这样做

我看不出两者之间会有任何明显的性能差异,但我认为选项二更具可读性。

我不相信您在两个实现之间可能遇到任何性能差异。

无论如何,我选择后者实现,因为它更具可读性。

取决于编译器。 当嵌套if之后 ,但在外部关闭之前有代码时,差异会更明显。

我经常自己想知道这件事。 但是,似乎选项之间确实没有区别(或者说不多)。 可读性方面,第二个选项更具可读性,因此我通常会选择那个选项,除非我预计必须因某些原因专门针对每个条件进行编码。