C#中的单行增量和返回语句

4

最近几天我一直在玩C#,尝试利用其“简洁”的语法,我试图使用以下技巧。

Int32 _LastIndex = -1; 
T[] _Array;
_Array[_LastIndex++] = obj;

现在的问题是这会返回在增加数值之前的值,因此我尝试...
_Array[(_LastIndex++)] = obj;

然而,同样的行为正在发生(这也让我有点困惑)。

首先,有人能解释一下为什么第二个例子不起作用吗?我明白第一个例子为什么不起作用。还有没有什么方法可以实现我想做的事情?

3个回答

5

将后增操作_LastIndex++用括号括起来并不会将其分离为一个独立的操作,它只会改变:

_Array[_LastIndex++] = obj;    // _Array[_LastIndex] = obj; _LastIndex++;

into:

_Array[(_LastIndex++)] = obj;  // _Array[(_LastIndex)] = obj; _LastIndex++;

如果您想在使用之前增加,您需要使用前缀自增变量,如下所示:
_Array[++_LastIndex] = obj;    // ++_LastIndex; _Array[_LastIndex] = obj;

4

你试过_Array[++_LastIndex]吗?

LastIndex++会增加变量的值,但返回旧值。

++LastIndex会先增加变量的值,然后返回增加后的值。


2

您需要:

_Array[++_LastIndex] = obj;

这被称为预增量,这意味着在使用该值之前进行增加。括号用于修改优先级,而不一定改变评估顺序。此外,在这种情况下,括号对优先级没有影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接