1

有人可以解释为什么 C# ++ 运算符根据分配的变量提供不同的输出。 https://msdn.microsoft.com/en-us/library/36x43w8w.aspx

 int x = 0;
 int y  = x++;
 Console.WriteLine($"x: {x}" );
 Console.WriteLine($"y: {y}" );

 /*Prints
  * x: 1
  * y: 0
  */

我的理解是y被设置为x,即 (0) 然后在分配y; x加 1;

int x = 0;
x  = x++;
Console.WriteLine($"x: {x}" );

/*Prints
 * x: 0
 */

为什么相同的逻辑在这里不适用?x应设置x为 0,然后在赋值增加x1 并打印 1 而不是 0

此示例相同

int x = 0;
        x  += x++;
        Console.WriteLine($"x: {x}" );
/*Prints
 * x: 0
 */

再举一个例子

int x = 0;
        x  += x++ + x++;
        Console.WriteLine($"x: {x}" );
        /*Prints
         * x: 1
         */

似乎在我不理解的背景中发生了一些不同的逻辑。

4

2 回答 2

2
int x = 0;
x  = x++;

第一个操作 - 存储初始值x(0),第二个操作 - 增加x(1),第三个操作 - 将存储的值分配给x(0)

int x = 0;
x  += x++;

在这种情况下,加法的第一个操作数在递增 (0) 之前“冻结”,第二个操作数也在递增 (0) 之前“冻结”。结果0 + 0 = 0

于 2017-02-07T00:47:46.650 回答
-1

对于您正在尝试做的事情,您让操作员以错误的方式解决了问题。

根据文档:

自增运算符可以出现在其操作数之前或之后:++variable 和 variable++

第一种形式是前缀递增操作。操作的结果是操作数增加后的值。

第二种形式是后缀递增操作。操作的结果是操作数在递增之前的值。

因此,在您的代码示例中,您设置yx before x递增。如果您希望设置y值,x您需要使用前缀增量操作来增加x,并让结果成为您希望的新值:

int x = 0;
int y = ++x;
Console.WriteLine($"x: {x}" );
Console.WriteLine($"y: {y}" );
/*Prints
  * x: 1
  * y: 1
*/
于 2017-02-07T00:47:15.087 回答