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

C# 在While循环中使用1==1或true,c#,C#,我最近遇到了一个while语句,它使用1==1而不是true 例如: while (1 == 1) { // Do something } 而不是: while (true) { // Do something } 它们看起来都是正确的,并生成相同的结果,但我想知道(除了为什么开发人员会使用1==1而不是true-风格/习惯之外)从编译器的角度来看,这有什么影响,使用比较运算符而不是true是否会有更大的开销?没有区别。编译器会将它们优化为相同的IL 1==1 IL_0000:

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

例如:

while (1 == 1) 
{
   // Do something
}
而不是:

while (true)
{
   // Do something
}

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

没有区别。编译器会将它们优化为相同的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
真的


任何一种选择都纯粹是开发人员的风格偏好。

我认为没有区别,只是对(;)使用
并节省一些字节;)这对于@CallumBradbury来说很好,我相信我已经使用了
while(true)
作为一个线程,我想持续运行,直到整个程序停止投票重新打开。这个问题有一个明确的答案,正如@DavidL的回答所证明的那样。@DmytroShevchenko谢谢,我已经编辑了这个问题,以与问题指南见面。这也使得DavidL的答案更加贴切。*
1==1
尖叫道,“小心你的脚步;这里发生了一些有趣的事情”*<代码>while(true)在浏览代码时可能会被误认为是函数调用(c.f.
DoStuff(true)
)。@Kaspervendenberg这无疑是编写良好的自文档代码的一个很好的观点。虽然就个人而言,我认为这两种情况都会从大量的文档中受益,因为您需要一个很好的理由来这样做。谢谢@DavidL,我完全忘记了使用ildasm在IL级别比较这两个语句。@Steve很乐意提供帮助。对于这种类型的东西,另一个有用的工具是LinqPad。它并不总是包含每一条指令,但它会捕获最重要的步骤,让您快速细分。由于语义相同,我认为开发人员的偏好只能是风格或视觉,或者可能他们缺少一根手指。
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