C# 返回和输出参数的执行顺序

C# 返回和输出参数的执行顺序,c#,.net,visual-studio,C#,.net,Visual Studio,有人能解释一下为什么下面的程序会输出“4,6”而不是“4,4” 非常感谢 在表达式y+parse(x,out y)中,调用parse之前的y值作为表达式求值的一部分被捕获,然后调用parse(x,out y),它在事实发生后修改y的值。因此表达式的计算结果为4+2我想您对parse的第二个调用很感兴趣,对吧 +的操作数从左到右求值,然后进行加法,最后进行赋值 这一行: y = y + parse(x, out y); 逻辑上是: int lhs = y; // Now lhs = 4, x =

有人能解释一下为什么下面的程序会输出“4,6”而不是“4,4”


非常感谢

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

我想您对
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

这对你有帮助吗?

我看这里没有问题。前4个被分配给y。然后将parse()返回值中的2添加到它。结果6最终再次分配给y。
首先,在计算“+”之前是y(4),然后在计算“+”之后是parse()(2),最后4+2被分配给y。

FYI-埃里克·利珀特(Eric Lippert)就这个问题发表了一篇很好的帖子:(查看“计算顺序”部分)首先,你为什么要写这么疯狂的代码?我认为你最好解释一下为什么你认为4,4是一个合理的输出,然后我们可以指出你的错误。在某个地方,你的推理链出了问题。
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