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

san*_*ngh 4 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 = 0; n < 100; n++)
        {
            i = i++;
        }
        Console.WriteLine(i);
    }

}
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 7

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

因此,在递增之前,i = i++将评估i,递增i,然后分配i原始值.

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


tva*_*son 7

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

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

    for (int n = 0; n < 100; n++)
    {
        j = i;
        i++;
        i = j;
    }
Run Code Online (Sandbox Code Playgroud)

由于这种情况,增量基本上被丢弃并且i实际上从未增加.


Han*_*ank 5

i = i++;
Run Code Online (Sandbox Code Playgroud)

这将i设置为i的旧值,然后递增它.我想你想要:

i++;
Run Code Online (Sandbox Code Playgroud)

或者更好的是,如果您的编译器是蹩脚的并且没有优化返回:

++i;
Run Code Online (Sandbox Code Playgroud)

干杯.