return和out参数的执行顺序

时间:2011-11-11 21:33:49

标签: c# .net 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;
}

非常感谢!

3 个答案:

答案 0 :(得分:6)

我认为您对parse的第二次电话真的很感兴趣,对吧?

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

这一行:

y = y + parse(x, out y);

逻辑上是:

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

这对你有帮助吗?

答案 1 :(得分:1)

在表达式y + parse(x, out y)中,在调用解析之前的y值被捕获为表达式求值的一部分,然后调用解析(x,out y),在事实之后修改y的值。因此表达式的计算结果为4 + 2

答案 2 :(得分:0)

我在这里看不到问题。前4分配给y。然后将parse()的返回值中的2添加到其中。最后将结果6再次分配给y。 首先,在" +"之前评估(4)然后在" +"之后解析()评估(2),最后将4 + 2分配给y。