关于c#:添加前增量丢失1

Addition with preincrement losing 1

本问题已经有最佳答案,请猛点这里访问。

为什么添加测试结果是12而不是13?它应该是5+1+7=13,但断言失败

Expected: 13

But was: 12

1
2
3
4
5
6
7
8
9
10
11
12
13
int method(int a)
{
    return 7;
}

[Test]
public void TestAddition()
{
    int row = 5;
    row += method(++row);

    Assert.AreEqual(13, row,"Why is it twelve instead of 13?");
}


因为你

1
row += method(++row);

等于

1
row = row + method(++row);

由于+操作符是左相关的,所以它将第一个row计算为5,而method总是返回7,而不管它取哪个参数。

1
2
3
row = row + method(++row);
       ^          ^
       5          7

这就是为什么结果会是12


1
row += method(++row);

是一样的

1
row = row + method(++row);

操作数从左到右进行计算,因此左操作数(row的值在rowmethod(++row)中递增之前进行计算。

预期结果为12。