我一直在写:
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/