在C#中使用if(!bool)vs if(bool == false)

时间:2011-09-23 23:23:28

标签: c# coding-style

以下两种编码风格是否存在任何形式的共识?我更好奇的是,如果在C#中的优秀代码中通常首选这种东西,或者在选择编码项目的样式时这是一种决定的事情。

风格1:使用!签署表示不在条件

if (!myBool)
{
  //Do Stuff...
}

样式2:使用== false表示在条件

中检查虚假
if (myBool == false)
{
  //Do Stuff...
} 

谢谢!

3 个答案:

答案 0 :(得分:34)

正常惯例是

if (!myBool)

我不走这条路的地方是可以悬挂的布尔。在那种情况下,我会做

if (myBool == true)
{

}

相当于

if (myBool.HasValue && myBool.Value)

答案 1 :(得分:4)

if(!myBool)
{
  // Do Stuff here...
}

这是首选版本,因为您已经有一个包含true或false的bool变量,因此没有理由在if语句中进行额外的评估。

更新

根据aquinas的说法,这种格式很好用,除非你有一个可以为空的布尔值(例如:bool? myBool)。如果是这种情况,请使用前者:

bool? myBool
if (myBool == false)
{
  // Do stuff here...
}

答案 2 :(得分:3)

我不知道后者是首选的任何语言。使用前者。

警告!

这有一个原因

在大多数语言中,这确实符合您的期望:

if (x == false)
    ...

但是在例如C ++,因为true只是1的同义词(所以2不是真或假),这个不起作用

if (x != true)
    ...

虽然它在C#中很好。

事实上,它在.NET中也会变得棘手 - 你可以欺骗布尔值来取整数值,然后用逐位算术弄乱(例如a & b可以a为1且b为2时为false,即使两者都为“true”。

一般情况下,只需使用前者而不是担心布尔文字。