return和out参数的执行顺序

use*_*153 2 .net c# visual-studio

有人可以解释为什么以下程序将输出"4,6"而不是"4,4".

MainProgram()
{
  int x = 2;
  int y = 0;

  parse(4, out y);
  Console.Write(y + ",");
  y = y + parse(x, out y);
  Console.Write(y);
}

int parse(int x, out int y)
{
    y = x;
    return y;
}
Run Code Online (Sandbox Code Playgroud)

非常感谢!

Jon*_*eet 6

我假设你真的对第二次打电话感兴趣parse,对吗?

+从左到右评估操作数,然后进行添加,然后进行最终分配.

这一行:

y = y + parse(x, out y);
Run Code Online (Sandbox Code Playgroud)

逻辑上是:

int lhs = y;
// Now lhs = 4, x = 2, y = 4
int rhs = parse(x, out y);
// Now rhs = 2, x = 2, y = 2
y = lhs + rhs;
// Now y = 6
Run Code Online (Sandbox Code Playgroud)

这对你有帮助吗?