19

我现在已经看到了两种不同的方法来制作布尔返回方法:

bool Case1()
{
    if (A)
        return true;
    else
        return false;
}
bool Case2()
{
    if (A)
        return true;
    return false;
}

哪个更快?不写else只是为了节省一行,使它更清晰,或者性能提升可以忽略不计,是否有意义?

4

5 回答 5

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 次,也无需担心。

于 2012-12-31T14:56:29.597 回答
6

c# 编译器应该为这两种情况生成相同的 IL,因此性能上应该没有差异。如果您对实际发生的事情感到好奇(尝试教如何钓鱼),您可以随时查看生成的 IL 。

恕我直言,Case1更容易阅读,这是值得的。我的第二个选择是return A;(如其他一些答案中所述)。如果A不是bool,则存在隐式转换,在某些情况下可能会令人困惑。

我认为可读性应该胜出,除非你可以用分析器证明你有问题。

于 2012-12-31T14:49:35.640 回答
5

不会有(可以忽略不计的)差异。从编码的角度来看,你真的应该这样做:

return A;

但假设代码只是一个例子,那么我建议:

bool Case3()
{
    bool retValue;
    if (A)
    {
        retValue = true;
    } 
    else
    { 
        retValue = false;
    }
    return retValue;
}

这样你就很清楚正在发生什么,以及要返回什么值。如果您需要返回并更改该方法的功能,则要容易得多。

于 2012-12-31T14:52:51.583 回答
1

在性能方面它们是相同的。从良好的编码实践的角度来看,更喜欢后者 - 以便清楚函数始终返回有效值。

于 2012-12-31T14:51:15.137 回答
0

他们是一样的。

如果A为假,则return false在这两种情况下都会跳转到该语句。

于 2012-12-31T14:49:43.100 回答