【问题标题】:Using if (!bool) vs if (bool == false) in C# [closed]在 C# 中使用 if (!bool) 与 if (bool == false) [关闭]
【发布时间】:2011-09-23 23:23:27
【问题描述】:

对于以下两种编码风格是否有某种风格共识?我更好奇这是在 C# 中的好代码中通常首选的那种事情,或者这是在为编码项目选择风格时决定的那种事情。

样式 1:使用 !符号表示不在条件中

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

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

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

谢谢!

【问题讨论】:

标签: c# coding-style


【解决方案1】:

正常的约定是

if (!myBool)

我不走这条路的一个地方是可以为空的布尔值。在那种情况下,我会这样做

if (myBool == true)
{

}

相当于

if (myBool.HasValue && myBool.Value)

【讨论】:

  • 对于 Nul,able 你也可以使用框架 varaible.GetValueOrDefault() 提供的扩展方法
  • 不同意 - 对于编码可读性 == true/false 比 empty/ 更清晰/!
  • 我喜欢这种可以为空的布尔检查风格,但其他人想做:(myBool ?? false),他们说这是用于 null 的默认值,但我个人认为这更难阅读/理解。不过,他们回来说如果 null 最终成为 == true 会发生什么,这很奇怪,因为 null == null 无论如何都是错误的。 :)
【解决方案2】:

我不知道哪种语言更适合后者。使用前者。

警告!

这是有原因的!

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

if (x == false)
    ...

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

if (x != true)
    ...

虽然在 C# 中没问题。

事实上,它在 .NET 中也很棘手——你可以欺骗一个布尔值来获取一个整数值,然后用按位算术把它弄乱(例如,a & ba 是 1,b 是 2,即使两者都是“真”)。

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

【讨论】:

  • 在具有强制类型转换的语言中,您可能希望使用 ===
  • .... 前提是您希望针对特定条件依赖类型强制
  • @SkyKelsey:还不如说“在 Javascript 中”:P。
【解决方案3】:
if(!myBool)
{
  // Do Stuff here...
}

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


更新

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

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

【讨论】:

    猜你喜欢
    • 2017-02-04
    • 2013-08-17
    • 2020-02-28
    • 2023-04-09
    • 2023-02-22
    • 2015-09-06
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    相关资源
    最近更新 更多