在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 & b
当a
为1且b
为2时, a & b
可能为false,即使两者都是“真实的”)。
通常,只使用前者而不是担心布尔文字。