我一直在写:

if(Class.HasSomething() == true/false)
{
  // do somthing
}
else
{
  // do something else
}

但我也见过相反的人:
if(true/false == Class.HasSomething())
{
  // do somthing
}
else
{
  // do something else
}

在性能和速度上做一个或另一个是否有优势?我在这里不是在谈论编码风格。

最佳答案

第二个例子是我所听到的所谓的“尤达条件”。 “错误,此方法的返回值必须为”。这不是您用英语说的方式,因此在说英语的程序员中,它通常被人鄙视。

在性能方面,实际上没有什么区别。第一个示例通常在语法上更好(因此也提高了可读性),但是给定方法的名称,所涉及的“语法”(以及您将bool与bool进行比较的事实)无论如何都会使相等性检查变得多余。因此,对于一个真实的陈述,我会简单地写:

if(Class.HasSomething())
{
  // do somthing
}
else
{
  // do something else
}

因为if()块基本上具有内置的相等性比较,所以这将以增量方式更快,因此,如果您对if(Class.HasSomething() == true)进行编码,则CLR将评估if((Class.HasSomething() == true) == true)。但是,我们这里所说的可能是几个时钟的增益(不是毫秒,不是滴答声,而是时钟;在现代处理器中每秒发生20亿次的时钟)。

对于错误条件,这是在使用not运算符if(!Class.HasSomething())与对false:if(Class.HasSomething() == false)的比较之间的折衷。第一个更为简洁,但是很容易错过复杂表达式中的一点惊叹号(特别是因为它出现在整个表达式之前),因此我考虑将其等同于false以确保代码可读。

关于c# - : MethodReturnsBoolean == true/false OR true/false == MethodReturnsBoolean是最佳做法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10434841/

10-09 20:01
查看更多