我现在已经看到了两种不同的方法来制作布尔返回方法:
bool Case1()
{
if (A)
return true;
else
return false;
}
bool Case2()
{
if (A)
return true;
return false;
}
哪一个更快?不写else
只是为了保存一条线,使它更清晰,还是可以忽略不计的性能增益?
答案 0 :(得分:35)
即使我们查看他们的IL
代码,他们也有相同的IL
代码,因此它们之间没有性能差异。 使用更具可读性的。
.method private hidebysig instance bool Case1() cil managed
{
// Code size 9 (0x9)
.maxstack 1
.locals init ([0] bool CS$1$0000,
[1] bool CS$4$0001)
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.1
IL_0003: ldc.i4.1
IL_0004: stloc.0
IL_0005: br.s IL_0007
IL_0007: ldloc.0
IL_0008: ret
} // end of method Program::Case1
看看这些代码的表现;
http://ideone.com/8Sc7Ho - >记忆:33856 kB
http://ideone.com/MrnaAl - >记忆:33808 kB
因此,如果您使用它们甚至10,000次,则无需担心。
答案 1 :(得分:6)
c#编译器应该为这两种情况生成相同的IL,因此性能应该没有区别。如果你好奇实际发生了什么(试图教如何捕鱼),你总是可以view the generated IL。
恕我直言,Case1
更容易阅读,这是值得的。我的第二选择是return A;
(如其他答案中所述)。如果A
不是bool
,则存在隐式转换,在某些情况下可能会造成混淆。
我认为可读性应该会获胜,除非您能够使用分析器证明您有问题。
答案 2 :(得分:4)
没有(可忽略的)差异。从编码的角度来看,你真的应该这样做:
return A;
但是假设代码只是一个例子,那么我建议:
bool Case3()
{
bool retValue;
if (A)
{
retValue = true;
}
else
{
retValue = false;
}
return retValue;
}
通过这种方式,您可以清楚地了解正在发生的事情以及要返回的价值。如果您需要返回并更改该方法的功能,则更容易。
答案 3 :(得分:1)
表现明智,他们是一样的。从良好的编码实践角度来看,更喜欢后者 - 因此很明显函数总是返回有效值。
答案 4 :(得分:0)
他们是一样的。
如果A
为false,则在两种情况下都会跳转到return false
语句。