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

mwe*_*ber 20 c# coding-style

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

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

if (!myBool)
{
  //Do Stuff...
}
Run Code Online (Sandbox Code Playgroud)

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

if (myBool == false)
{
  //Do Stuff...
} 
Run Code Online (Sandbox Code Playgroud)

谢谢!

aqu*_*nas 36

通常的惯例是

if (!myBool)
Run Code Online (Sandbox Code Playgroud)

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

if (myBool == true)
{

}
Run Code Online (Sandbox Code Playgroud)

这相当于

if (myBool.HasValue && myBool.Value)
Run Code Online (Sandbox Code Playgroud)

  • 对可空的布尔人的好评! (7认同)
  • 对于Nul,able <bool>,您也可以使用框架varaible.GetValueOrDefault()提供的淘汰方法。 (4认同)

Meh*_*dad 6

我不知道有哪种语言更喜欢后者。使用前者。

警告!

这是有原因的!

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

if (x == false)
    ...
Run Code Online (Sandbox Code Playgroud)

但在例如 C++ 中,因为true是 1 的同义词(所以2不是 true 或 false),所以这是行不通的

if (x != true)
    ...
Run Code Online (Sandbox Code Playgroud)

虽然在 C# 中没问题。

事实上,在 .NET 中它也可能变得棘手——你可以欺骗一个布尔值来获取一个整数值,并用按位算术搞乱它(例如,当is 1 和is 2a & b时可能为 false ,即使两者都是“true”) )。ab

一般来说,只需使用前者,而不必担心布尔文字。

  • @SkyKelsey:不妨直接说“用 Javascript”:P。 (3认同)
  • 在具有类型强制的语言中,您可能需要使用 === (2认同)