我现在已经看到了两种不同的方法来制作布尔返回方法:
bool Case1()
{
if (A)
return true;
else
return false;
}
bool Case2()
{
if (A)
return true;
return false;
}
哪个更快?不写else
只是为了节省一行,使它更清晰,或者性能提升可以忽略不计,是否有意义?
我现在已经看到了两种不同的方法来制作布尔返回方法:
bool Case1()
{
if (A)
return true;
else
return false;
}
bool Case2()
{
if (A)
return true;
return false;
}
哪个更快?不写else
只是为了节省一行,使它更清晰,或者性能提升可以忽略不计,是否有意义?
即使我们查看它们的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 次,也无需担心。
c# 编译器应该为这两种情况生成相同的 IL,因此性能上应该没有差异。如果您对实际发生的事情感到好奇(尝试教如何钓鱼),您可以随时查看生成的 IL 。
恕我直言,Case1
更容易阅读,这是值得的。我的第二个选择是return A;
(如其他一些答案中所述)。如果A
不是bool
,则存在隐式转换,在某些情况下可能会令人困惑。
我认为可读性应该胜出,除非你可以用分析器证明你有问题。
不会有(可以忽略不计的)差异。从编码的角度来看,你真的应该这样做:
return A;
但假设代码只是一个例子,那么我建议:
bool Case3()
{
bool retValue;
if (A)
{
retValue = true;
}
else
{
retValue = false;
}
return retValue;
}
这样你就很清楚正在发生什么,以及要返回什么值。如果您需要返回并更改该方法的功能,则要容易得多。
在性能方面它们是相同的。从良好的编码实践的角度来看,更喜欢后者 - 以便清楚函数始终返回有效值。
他们是一样的。
如果A
为假,则return false
在这两种情况下都会跳转到该语句。