我有时会看到youtube上的人写作
if(something) { ...; }
而不是
if(something == true) { ...; }
使用这样的if语句的规则是什么?是因为if语句默认检查是否为真?
答案 0 :(得分:6)
仅用于检查括号之间的条件是真还是假。
if(something == true) {}
在大多数情况下都是相同的,请阅读下面我使用most
一词的原因。
if(something) {}
我个人认为添加== true
不会让它更具可读性。所以我倾向于使用if(something)
。我会选择你的团队使用的那个。单独编程?选择你最喜欢的那个。
作为附加:当检查条件是否为假时,您可以使用:
if(!something) {}
注意:
来自die maus'回答:
虽然Max答案是正确的,但我想补充一些内容。如果是的话 (booleanVariable == true)和if(booleanVariable)一般是 完全相同的事情,你没有考虑Nullable 还是布尔?简写。
答案 1 :(得分:4)
对于bool
值,它们是相同的......但请注意:
// Note the name of the class (Nomen est omen)
public class InsaneClass
{
public static implicit operator bool(InsaneClass v)
{
Console.WriteLine("Operator bool");
return true;
}
public static bool operator==(InsaneClass v1, bool v2)
{
Console.WriteLine("Operator ==");
return true;
}
public static bool operator !=(InsaneClass v1, bool v2)
{
Console.WriteLine("Operator !=");
return true;
}
}
然后
var ic = new InsaneClass();
if (ic)
{
// Operator bool
}
if (ic == true)
{
// Operator ==
}
: - )
但是,通常你不应该超载implicit operator bool
,除非你真的知道你在做什么! (请注意,您可以通过重载operator true
加上implicit operator InsaneClass(bool)
和operator==(InsaneClass, InsaneClass)
来获得其他有趣的结果...这表明至少有 Java之所以没有运算符重载的原因:-)
答案 2 :(得分:4)
虽然Max答案是正确的,但我想补充一些内容。
虽然if (booleanVariable == true)
和if (booleanVariable)
通常完全相同,但您没有考虑Nullable<bool>
或bool?
作为简写。
考虑一下:
var nb = (bool?)true;
然后:
if (nb) // this is a syntax error
{
// [...]
}
鉴于:
if (nb == true) // this is a NOT an error.
{
// [...]
}
可以使用可空白的bool不是最常见的东西。
作为一般规则,只需编写if (booleanValue)
,因为它看起来更干净。
对于返回布尔值的所有内容,它的作用相同。
if (book.HasPages())
比我的书中的if (book.HasPages() == true)
更具可读性(无双关语)
答案 3 :(得分:1)
鉴于某些东西是bool类型而不是某种带有隐式转换为bool的类型,那么两者的结果将是相同的if语句至少由两部分组成
在你的第一个例子中,条件是一个简单的表达式,即something
,所以如果某些内容为真,则执行if语句的主体。
在第二个示例中,表达式稍长something == true
,这是二进制比较。它将检查两侧的值是否相等,在哪种情况下,它评估为true
,如果我们写出来,它们是否评估为false
true == true
并且计算结果为真false == true
并且评估为false 换句话说,较长的表达式将始终计算为something
的值,但它使用冗余比较来获得结果。