【发布时间】:2017-06-24 02:30:29
【问题描述】:
谁能解释一下为什么 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,然后在赋值后将 x 增加 1 并打印 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
*/
似乎在我不理解的背景中发生了一些不同的逻辑。
【问题讨论】:
-
关于 ++ 运算符(前缀和后缀)如何在 C# 中工作的详细说明在这里:stackoverflow.com/a/3346729/1286670
-
@Steve 我不确定这是否是故意的,但您将 "Unary Prefix Increment
++Operator" 更改为 "Unary Prefix Increment @987654337 @Operator" - 没有这样的事情 -
我相信@Ňuf 找到的 Eric Lippert 的回答涵盖了这篇文章的所有问题。如果仍然缺少某些内容 - 请edit 发帖并澄清哪些部分需要单独解释。请确保在进行编辑时编写准确的分步推理 - 除了为 ++ 操作提供的 5 个 Eric 之外,您最多应该有几个额外的步骤来覆盖整个
x = x++语句。 -
@MickyD 是的,我的错。以为您在谈论从标题中删除语言标签,这通常是合适的。
-
@AlexeiLevenkov 这真的是stackoverflow.com/questions/3346450/… 的副本吗,因为这个问题与预增量无关?
标签: c# variables operators unary-operator prefix-operator