后递增操作作为计算整个表达式的一部分发生。这是在计算值之后但在计算任何其他表达式之前发生的副作用。
换句话说,对于任何表达式 E,E++(如果合法)表示类似(伪代码)的内容:
T tmp = E;
E += 1;
return tmp;
That's all在评估其他任何内容之前,评估 E++ 的一部分。
有关更多详细信息,请参阅 C# 3.0 规范的第 7.5.9 节。
此外,对于 LHS 被分类为变量的赋值运算(如本例所示),将计算 LHSbefore评估 RHS。
所以在你的例子中:
int[] data = { 11, 22, 33 };
int i = 1;
data[i++] = data[i] + 5;
相当于:
int[] data = { 11, 22, 33 };
int i = 1;
// Work out what the LHS is going to mean...
int index = i;
i++;
// We're going to assign to data[index], i.e. data[1]. Now i=2.
// Now evaluate the RHS
int rhs = data[i] + 5; // rhs = data[2] + 5 == 38
// Now assign:
data[index] = rhs;
规范的相关部分是第 7.16.1 节(C# 3.0 规范)。