检查布尔值是否为真?

bool foo = true; // Do this? if (foo) { } // Or this? if (foo == true) { } 

我喜欢他们中的一个,另一个喜欢我的同事。 结果是一样的,但更正确的是什么?

几乎每个我见过表达意见的人都喜欢

 if (foo) { } 

事实上,我看到很多人批评明确的比较,我甚至可能在此之前就这样做了。 我会说“短”风格是惯用的。

编辑:

请注意,这并不意味着代码行始终不正确。 考虑:

 bool? maybeFoo = GetSomeNullableBooleanValue(); if (maybeFoo == true) { ... } 

那将编译,但没有“== true”它不会,因为没有来自bool?的隐式转换bool? bool

这取决于你的情况。

我会说,如果你的博尔有一个好名字,那么:

 if (control.IsEnabled) // Read "If control is enabled." { } 

将是首选。

但是,如果变量具有不那么明显的名称,则检查true将有助于理解逻辑。

 if (first == true) // Read "If first is true." { } 

如果你打算选择

 if(foo == true) 

为什么不一路走下去呢

 if(foo == true == true == true == true == true == true == true == true == true) 

这是一回事。

我不同意,如果它明确命名(即: IsSomething )然后可以不与真实比较,但否则你应该。 如果它在if语句中显然可以与true进行比较。

 if(monday) 

就像描述一样

 if(monday == true) 

我也不喜欢相同的标准:

 if(!monday) 

而不是

 if(monday == false) 

第一个例子几乎总是在我的书中获胜:

 if(foo) { } 

它更短更简洁。 为什么在绝对不需要的时候添加额外的支票? 只是在浪费周期……

但我确实同意,在变量命名不佳的情况下,有时候更冗长的语法会使事情更具可读性(只要性能可以接受,这最终会更重要)。

两者都是正确的。

您可能在公司中有一些编码标准 – 只需看看即可完成。 如果你没有 – 你应该:)

我个人更喜欢

 if(true == foo) { } 

== / =错误类型没有机会,我觉得它在foo类型方面更具表现力。 但这是一个非常主观的问题。

两者都不“更正确”。 我个人的偏好是更简洁的forms,但要么是好的。 对我而言,生命太短暂,甚至无法考虑争论这样的事情。