为什么c++在c#中的用法不同
本文关键字:用法 c++ 为什么 | 更新日期: 2023-09-27 18:20:52
我有一个类Deduction
,它具有int
类型的属性Sequence
:
public class Deduction
{
private int _sequence;
public int Sequence
{
get { return _sequence; }
set { _sequence = value; }
}
...
}
现在我有一个Deduction
类型的对象,它的Sequence
属性的值为1:
Deduction deduction = new Deduction();
deduction.Sequence = 1;
现在我有一个int
类型的变量newSequence
,其值为-1:
int newSequence = -1;
我想取deduction
对象的Sequence
属性的当前值,加1并将结果存储在newSequence
变量中。所以我写了这个代码:
newSequence = deduction.Sequence++;
但我发现,上面的代码将deduction
对象的Sequence
属性的值从1更改为2,而我预计它将保持在1。
此外,上面的代码将newSequence
的值从-1更改为1,而我预计它将更改为2
。
这很奇怪。有人能解释一下这里发生了什么吗?
感谢
++
递增其旁边的值。如果在变量/属性后有运算符(++
),则变量在赋值后递增1。如果在赋值之前有++
,则变量会在赋值之前增加。
看来您要找的是newSequence = deduction.Sequence + 1;
这:
newSequence = deduction.Sequence++;
相当于:
newSequence = deduction.Sequence;
deduction.Sequence = deduction.Sequence + 1;
现在更有意义了吗?
如果你这样做:
newSequence = ++deduction.Sequence;
它变成这样:
deduction.Sequence = deduction.Sequence + 1;
newSequence = deduction.Sequence;
正如其他人所说,你可能不想更改deduction.Sequence
,所以你想使用这个:
newSequence = deduction.Sequence + 1;
来自MSDN:
递增运算符(++)将其操作数递增1。增量运算符可以出现在其操作数之前或之后:++变量和变量++。备注第一种形式是前缀增量操作。运算的结果是操作数的值已递增。第二种形式是后缀增量操作。运算的结果是操作数在已递增。数值类型和枚举类型已预定义增量运算符。用户定义的类型可以重载++运算符。枚举通常允许对积分类型进行操作。
你可能错过了这是如何运作的微妙之处。通过将操作数放在末尾,完成赋值,然后完成增量。
++
是变量后面的post增量运算符,这意味着增量发生在赋值之后。
newSequence = deduction.Sequence++;
您将deduction.Sequence
的旧值分配给newSequence
,然后递增deduction.Sequence
的值。