Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果在第一个“return”之后有一个“else”,性能方面是否重要?_C#_.net_Performance_If Statement_Return - Fatal编程技术网

C# 如果在第一个“return”之后有一个“else”,性能方面是否重要?

C# 如果在第一个“return”之后有一个“else”,性能方面是否重要?,c#,.net,performance,if-statement,return,C#,.net,Performance,If Statement,Return,我现在看到了两种创建布尔返回方法的不同方法: bool Case1() { if (A) return true; else return false; } bool Case2() { if (A) return true; return false; } 哪一个更快?不写else只是为了节省一行代码,让它更清晰,还是性能提升可以忽略不计?c编译器应该为这两种情况生成相同的IL,因此性能应该没有差异。如果你对实际

我现在看到了两种创建布尔返回方法的不同方法:

bool Case1()
{
    if (A)
        return true;
    else
        return false;
}
bool Case2()
{
    if (A)
        return true;
    return false;
}
哪一个更快?不写
else
只是为了节省一行代码,让它更清晰,还是性能提升可以忽略不计?

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

依我看,
Case1
更容易阅读,这很有价值。我的第二个选择是
返回A(如其他一些答案中所述)。但是,如果
A
不是
bool
,则在某些情况下可能会产生混淆的隐式转换

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

它们是一样的


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

性能方面它们是相同的。从良好的编码实践的角度来看,最好使用后一种方法,这样很明显函数总是返回一个有效值

不会有(可忽略的)差别。从编码的角度来看,您确实应该做到:

return A;
但假设代码只是一个示例,那么我建议:

bool Case3()
{
    bool retValue;
    if (A)
    {
        retValue = true;
    } 
    else
    { 
        retValue = false;
    }
    return retValue;
}
这样,您就非常清楚正在发生什么,以及将返回什么值。如果您需要返回并更改该方法的功能,则更容易。

否。 即使当我们查看他们的
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
看看这些代码的性能

-->内存:33856 kB

-->内存:33808 kB


因此,即使您使用它们10.000次,也没有什么可担心的。

“为了微不足道的性能提高……有意义吗?”--没有!做有意义的事情,而不是你的CPU执行速度快一纳秒。@RichardJ.RossIII因为我不知道我是否可以节省一些执行时间,我觉得应该问这些问题。此外,我每秒可能会使用它们几千次,所以这可能会产生不同。@RichardJ.RossIII-我不同意。性能很重要,虽然这可能并不重要,但草率的思维确实重要。程序员很容易停止思考这些问题,因为他们“太小了”,很快就会有一个永远不会完成的系统或程序。我一次又一次地看到它。你已经用两种方式编写了代码。如果你想知道哪一个更快,那么双向运行,然后你就会知道了@用户1306322:这正是我的观点。如果差异如此之小,以至于你无法注意到它,那么就不要再担心它,把宝贵的时间花在一些确实会在世界上产生显著差异的事情上。“c#编译器将生成相同的MSIL”——已验证?不,未验证。但如果不是这样,我很想知道为什么。太糟糕了,我不能不止一次投票支持这一点。案例1更清楚。编程语言是为人类编写的,而不是为编译器编写的,所以在所有条件(包括性能)相同的情况下,从可读性的角度来看,选择最清晰的语言。我不知道是谁否决了这一点,但请给出解释。是的。布尔表达式必须驻留在if语句或循环语句中,这是一个非常常见的想法,但布尔表达式与任何其他表达式一样。没有人会这样编码:
if(x==1)返回1;如果(x==2),则返回2;如果(x==3)返回3。为什么要用bools执行此操作?难道不能执行
返回一个值吗?真:假然后?这里的控制台输出工作将掩盖您试图测试的问题。