你以前试过这个吗?
static void Main(string[] args)
{
int x = 10;
x = x++;
Console.WriteLine(x);
}输出: 10。
而是为了
static void Main(string[] args)
{
int x = 10;
x++;
Console.WriteLine(x);
}输出: 11。
有人能解释一下为什么会这样吗?
发布于 2008-10-22 14:35:36
X++将递增该值,但随后返回其旧值。
因此,在这种情况下:
static void Main(string[] args)
{
int x = 10;
x = x++;
Console.WriteLine(x);
}你在11处有一段时间,然后它又回到了10,因为10是(x++)的返回值。
您可以改为这样做,以获得相同的结果:
static int plusplus(ref int x)
{
int xOld = x;
x++;
return xOld;
}
static void Main(string[] args)
{
int x = 10;
x = plusplus(x);
Console.WriteLine(x);
}值得一提的是,如果你这样做了,你会得到11的预期结果:
static void Main(string[] args)
{
int x = 10;
x = ++x;
Console.WriteLine(x);
}发布于 2008-10-22 14:36:40
在赋值x = x++中,首先提取x的旧值以用于计算右侧的表达式,在本例中为'x';然后,将x递增1。最后,通过赋值语句将表达式求值的结果(10)赋值给x。
也许一个等效的代码会让困境变得清晰:
var tmp = x;
x++;
x = tmp;这相当于C#中的x = x++代码。
发布于 2008-10-22 14:37:01
x++的行为是递增x,但在递增之前返回值。出于这个原因,它被称为post增量。
所以x= x++;简单地说
1.返回值,然后
2.递增x,然后
3.将x的原始值(在步骤1中返回)赋给x。
https://stackoverflow.com/questions/226002
复制相似问题