C#增量运算符(+;+;)问题:为什么我得到错误的输出?

C#增量运算符(+;+;)问题:为什么我得到错误的输出?,c#,C#,我有一个简单的c#控制台应用程序,但我得到了错误的输出为什么 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication11 { class Program { static void Main(string[] args) { int i = 100; for (int n =

我有一个简单的c#控制台应用程序,但我得到了错误的输出为什么

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication11
{
class Program
{
    static void Main(string[] args)
    {
        int i = 100;
        for (int n = 0; n < 100; n++)
        {
            i = i++;
        }
        Console.WriteLine(i);
    }

}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序11
{
班级计划
{
静态void Main(字符串[]参数)
{
int i=100;
对于(int n=0;n<100;n++)
{
i=i++;
}
控制台写入线(i);
}
}
}
这将i设置为i的旧值,然后将其递增。我想你想要:

i++;
如果您的编译器很蹩脚并且没有优化返回,则更好:

++i;

干杯。

i++
是一个表达式,返回
i
,然后递增

因此,
i=i++
将计算
i
,递增
i
,然后在递增之前将
i
赋值给原始值


您需要使用
++i
,它将返回递增的值。

i=i++向变量i写入两次。先执行post增量,但赋值语句会覆盖它


试试
i++

只需使用i++,而不是i=i++。

我猜您确实想要解释为什么它不能按预期工作,而不是实际得到结果,因为您可以通过将
i
设置为等于200来获得结果

在创建变量的临时副本后应用postincrement运算符。临时语句用于语句中的操作,然后执行赋值,因此循环相当于:

    for (int n = 0; n < 100; n++)
    {
        j = i;
        i++;
        i = j;
    }
for(int n=0;n<100;n++)
{
j=i;
i++;
i=j;
}

既然如此,增量基本上被丢弃,而
i
实际上从未增加过。

关于Java中相同构造的老问题:可能是重复的,或者更好的是,
i+=2
。在C/++,
i=i++是显式未定义的。
    for (int n = 0; n < 100; n++)
    {
        j = i;
        i++;
        i = j;
    }