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



我有时在youtube上看到人们只写

if(something) { ...; } 

而不是

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

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

它只是用于检查括号之间的条件是true还是false。

if(something == true) {}

在大多数情况下与,阅读下面我为什么使用单词most相同。

if(something) {}

我个人不认为添加== true会使它更可读。所以我倾向于使用if(something)。我会选择你们团队使用的。单独编程?选一个你最喜欢的。

附加:当检查条件是否为假时,您可以使用:

if(!something) {}

注:

来自diemaus的答案:

虽然Max的答案是正确的,但我想补充一些内容。而如果(booleanVariable==true)和if(booleanCariable)通常是完全一样,你没有考虑Nullable还是布尔?用于速记。

对于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没有运算符重载至少有一个原因:-)

虽然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.
{
    // [...]
}

然而,可为null的bools并不是最常见的事情。

一般来说,只需编写if (booleanValue),因为它看起来更干净。对于返回布尔值的所有操作都是一样的。

在我的书中,if (book.HasPages())if (book.HasPages() == true)更可读(无意双关)

如果某个东西的类型是bool,而不是某个隐式转换为bool的类型,那么两者的结果将是相同的——if语句至少由两部分组成

  • 条件
  • 满足条件时要执行的主体(也称为true

在第一个例子中,条件是一个简单的表达式,即something,因此如果某个值为true,则执行if语句的主体。

在第二个示例中,表达式稍长something == true,这是一个二进制比较。它将检查两侧的值是否相等,在这种情况下,它的计算结果为true,如果我们写出,它们的计算结果不为false

  • 当某事为true时,表达式为true == true,并计算为true
  • 当某物为false时,表达式为false == true,并计算为false

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

最新更新