混淆if(something){}和if(something == true){}

时间:2015-03-21 19:34:14

标签: c# if-statement

我有时会看到youtube上的人写作

if(something) { ...; } 

而不是

if(something == true) { ...; }

使用这样的if语句的规则是什么?是因为if语句默认检查是否为真?

4 个答案:

答案 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时,表达式为false == true并且评估为false

换句话说,较长的表达式将始终计算为something的值,但它使用冗余比较来获得结果。