加法与预增量失去 1

Addition with preincrement losing 1

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

Expected: 13

But was: 12

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?");
}
row += method(++row);

相同
row = row + method(++row);

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

预期结果为 12。

因为你的

row += method(++row);

等于

row = row + method(++row);

因为 + operator is left associative,它首先计算 row 作为 5 并且 method 总是 return 7 no matter 它需要哪个参数。

row = row + method(++row);
       ^          ^
       5          7

这就是为什么结果会是 12