在While循环中使用1 == 1或true

Ste*_*eve 9 c#

我最近遇到了一个使用1 == 1而不是true的while语句.

例:

while (1 == 1) 
{
   // Do something
}
Run Code Online (Sandbox Code Playgroud)

代替:

while (true)
{
   // Do something
}
Run Code Online (Sandbox Code Playgroud)

它们看起来都是正确的并产生相同的结果但是我想知道(除了为什么开发人员会使用1 == 1而不是真实的样式/习惯)从编译器的角度来看这有什么影响,是否有更大的使用比较运算符代替true的开销?

Dav*_*d L 14

没有区别.编译器会将它们优化为相同的IL.

1 == 1

IL_0000:  nop         
IL_0001:  br.s        IL_0005
IL_0003:  nop         
IL_0004:  nop         
IL_0005:  ldc.i4.1    
IL_0006:  stloc.0     // CS$4$0000
IL_0007:  br.s        IL_0003
Run Code Online (Sandbox Code Playgroud)

真正

IL_0000:  nop         
IL_0001:  br.s        IL_0005
IL_0003:  nop         
IL_0004:  nop         
IL_0005:  ldc.i4.1    
IL_0006:  stloc.0     // CS$4$0000
IL_0007:  br.s        IL_0003
Run Code Online (Sandbox Code Playgroud)

任何一种选择都是开发者纯粹的风格偏好.

  • *`1 == 1`尖叫,"记住你的步骤;这里发生了一些有趣的事情";*`while(true)`在浏览代码时可能被误认为函数调用(参见`DoStuff(true)`). (2认同)
  • @KaspervandenBerg 这无疑是编写良好的自记录代码的一个极好的观点。尽管就我个人而言,我认为这两种情况都会受益于大量的文档,因为您需要一个很好的理由来这样做。 (2认同)