最近几天我一直在玩C#,尝试利用其“简洁”的语法,我试图使用以下技巧。
Int32 _LastIndex = -1;
T[] _Array;
_Array[_LastIndex++] = obj;
现在的问题是这会返回在增加数值之前的值,因此我尝试...
_Array[(_LastIndex++)] = obj;
然而,同样的行为正在发生(这也让我有点困惑)。
首先,有人能解释一下为什么第二个例子不起作用吗?我明白第一个例子为什么不起作用。还有没有什么方法可以实现我想做的事情?
将后增操作_LastIndex++
用括号括起来并不会将其分离为一个独立的操作,它只会改变:
_Array[_LastIndex++] = obj; // _Array[_LastIndex] = obj; _LastIndex++;
into:
_Array[(_LastIndex++)] = obj; // _Array[(_LastIndex)] = obj; _LastIndex++;
_Array[++_LastIndex] = obj; // ++_LastIndex; _Array[_LastIndex] = obj;
你试过_Array[++_LastIndex]
吗?
LastIndex++
会增加变量的值,但返回旧值。
++LastIndex
会先增加变量的值,然后返回增加后的值。
您需要:
_Array[++_LastIndex] = obj;
这被称为预增量,这意味着在使用该值之前进行增加。括号用于修改优先级,而不一定改变评估顺序。此外,在这种情况下,括号对优先级没有影响。