检查布尔值是否为真?

时间:2010-09-10 13:37:31

标签: c#

bool foo = true;

// Do this?
if (foo)
{
}

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

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

7 个答案:

答案 0 :(得分:40)

我见过的几乎所有人都表达了意见

if (foo)
{
}

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

编辑:

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

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

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

答案 1 :(得分:27)

这取决于你的情况。

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

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

将是首选。

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

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

答案 2 :(得分:12)

如果您要选择

if(foo == true)

为什么不一直走到

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

这是一回事。

我不同意,如果它的名字清楚(即:IsSomething)那么它可以不与真实比较,但否则你应该。如果它在if语句中显然可以与真实比较。

if(monday)

一样具有描述性
if(monday == true)

我也不喜欢相同的标准:

if(!monday)

而不是

if(monday == false)

答案 3 :(得分:3)

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

if(foo)
{
}

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

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

答案 4 :(得分:2)

两者都是正确的。

您的公司可能有一些编码标准 - 只需看一看即可。如果你没有 - 你应该:)

答案 5 :(得分:1)

我个人更喜欢

if(true == foo)
{
}

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

答案 6 :(得分:1)

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