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

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

风格1:使用! 标志表示不符合条件

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

样式2:使用== false表示在条件中检查虚假

 if (myBool == false) { //Do Stuff... } 

谢谢!

通常的惯例是

 if (!myBool) 

我没有走这条路的地方是可空的布尔。 在那种情况下,我会这样做

 if (myBool == true) { } 

这相当于

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

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

更新:

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

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

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

警告!

这是有原因的!

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

 if (x == false) ... 

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

 if (x != true) ... 

虽然它在C#中很好。

实际上,它在.NET中也会变得棘手 – 你可以欺骗一个布尔值来获取一个整数值,然后用逐位算术弄乱它(例如a & ba为1且b为2时, a & b可能为false,即使两者都是“真实的”)。

通常,只使用前者而不是担心布尔文字。