在返回行上进行变量赋值的好处
本文关键字:赋值 返回 变量 | 更新日期: 2023-09-27 17:53:11
如前所述,我很好奇这样做是否有什么好处:
return someNumber = CalculateResults(parameter);
和做的事情:
someNumber = CalculateResults(parameter);
return someNumber;
或做:
return CalculateResults(parameter);
使用其中一个比使用另一个有性能提升吗?
如果使用主动优化,这三种方法可能都是相同的,但是如果没有。
第一个和第二个必须在作用域中声明一个变量并返回它,而最后一个则不需要。我试着编译下面的程序:
int Calculate()
{
return 42;
}
int FirstCase()
{
int x;
return x = Calculate();
}
int SecondCase()
{
var x = Calculate();
return x;
}
int ThirdCase()
{
return Calculate();
}
使用LINQPad输出:
FirstCase:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: call UserQuery.Calculate
IL_0007: dup
IL_0008: stloc.0 // x
IL_0009: stloc.1 // CS$1$0000
IL_000A: br.s IL_000C
IL_000C: ldloc.1 // CS$1$0000
IL_000D: ret
SecondCase:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: call UserQuery.Calculate
IL_0007: stloc.0 // x
IL_0008: ldloc.0 // x
IL_0009: stloc.1 // CS$1$0000
IL_000A: br.s IL_000C
IL_000C: ldloc.1 // CS$1$0000
IL_000D: ret
ThirdCase:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: call UserQuery.Calculate
IL_0007: stloc.0 // CS$1$0000
IL_0008: br.s IL_000A
IL_000A: ldloc.0 // CS$1$0000
IL_000B: ret
第三种情况稍短一些。我也更喜欢这种方法,因为它比为它分配一个变量更流畅。我使用变量的唯一原因是,通过变量
前两者之间没有实际的好处,但在我看来,第二个比第一个更具可读性。
return CalculateResults(parameter);
如果someNumber
不以任何方式持续,甚至更好,您应该小心。
并减少一条指令(尽管如果优化器已经为您做过了,我不会感到惊讶)
分隔行将有助于调试,就像Jacob所说的那样。如果你不需要存储/操作返回的数据,那么你应该在不分配变量的情况下返回。
我更喜欢这个
return someNumber = CalculateResults(parameter);
。保存一行,并在调试时提供帮助。您只需将鼠标悬停在someNumber上即可获得返回值。
如果不执行赋值操作,性能增益(如果有的话)可以忽略不计。(编译器可能会优化它)