以下两种编码风格是否存在任何形式的共识?我更好奇的是,如果在C#中的优秀代码中通常首选这种东西,或者在选择编码项目的样式时这是一种决定的事情。
风格1:使用!签署表示不在条件
if (!myBool)
{
//Do Stuff...
}
样式2:使用== false表示在条件
中检查虚假if (myBool == false)
{
//Do Stuff...
}
谢谢!
答案 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”。
一般情况下,只需使用前者而不是担心布尔文字。