用AND替换嵌套if语句

ble*_*fee 5 c# nested-if

我想知道嵌套if是否优于AND语句.我有一个循环,这么多次,所以我想更快的执行可用.下面是与我的代码具有相同逻辑的代码.嵌套的if语句位于循环内.

   for ( int i = 0; i < array.length; i++)
   {
      // do stuff
      if (x == 5)
      {
         if (y == 3)
         {
             // do stuff
         }
      }
   }  
Run Code Online (Sandbox Code Playgroud)

如果用这个And STATEMENT替换嵌套的if,我的代码会有更大的差异吗?

     if ((x == 5) && (y == 3))
           // do stuff
Run Code Online (Sandbox Code Playgroud)

我已经阅读了这个链接,但我找不到答案.我是一名学生,仍然在学习,感谢所有的反馈!

Fil*_*erg 9

不,它在性能上没有显着差异,可读性可能存在差异.

IL在使用优化/发布(使用LINQPad测试)编译时,这两个都将生成相同的内容:

IL_0000:  ldc.i4.5    
IL_0001:  stloc.0     
IL_0002:  ldc.i4.s    0A 
IL_0004:  stloc.1     
IL_0005:  ldloc.0     
IL_0006:  ldc.i4.5    
IL_0007:  bne.un.s    IL_000D
IL_0009:  ldloc.1     
IL_000A:  ldc.i4.3    
IL_000B:  pop         
Run Code Online (Sandbox Code Playgroud)

即使没有优化,差异并不显着:

嵌套语句:

IL_0001:  ldc.i4.5    
IL_0002:  stloc.0     
IL_0003:  ldc.i4.s    0A 
IL_0005:  stloc.1     
IL_0006:  ldloc.0     
IL_0007:  ldc.i4.5    
IL_0008:  ceq         
IL_000A:  ldc.i4.0    
IL_000B:  ceq         
IL_000D:  stloc.2     
IL_000E:  ldloc.2     
IL_000F:  brtrue.s    IL_0020
IL_0011:  nop         
IL_0012:  ldloc.1     
IL_0013:  ldc.i4.3    
IL_0014:  ceq         
IL_0016:  ldc.i4.0    
IL_0017:  ceq         
IL_0019:  stloc.2     
IL_001A:  ldloc.2     
IL_001B:  brtrue.s    IL_001F
IL_001D:  nop         
IL_001E:  nop 
Run Code Online (Sandbox Code Playgroud)

不是嵌套语句:

IL_0001:  ldc.i4.5    
IL_0002:  stloc.0     
IL_0003:  ldc.i4.s    0A 
IL_0005:  stloc.1     
IL_0006:  ldloc.0     
IL_0007:  ldc.i4.5    
IL_0008:  bne.un.s    IL_0013
IL_000A:  ldloc.1     
IL_000B:  ldc.i4.3    
IL_000C:  ceq         
IL_000E:  ldc.i4.0    
IL_000F:  ceq         
IL_0011:  br.s        IL_0014
IL_0013:  ldc.i4.1    
IL_0014:  nop         
IL_0015:  stloc.2     
IL_0016:  ldloc.2     
IL_0017:  brtrue.s    IL_001B
IL_0019:  nop 
Run Code Online (Sandbox Code Playgroud)

  • 我同意你的观点,但是"但在可读性上"这句话没有任何意义.它具有讽刺意味,因为它评论了可读性,而且本身并不可读.:) (2认同)

Kye*_*ica 3

.NET 将停止检查条件的第一部分是否为 false,因此两者之间不会有性能差异。