为什么使用++;在c#中有什么不同?

为什么使用++;在c#中有什么不同?,c#,C#,我有一个类演绎,它的属性序列为int类型: public class Deduction { private int _sequence; public int Sequence { get { return _sequence; } set { _sequence = value; } } ... } 现在我有一个演绎类型的对象,其序列属性的值为1: Deduction deduction = new Deduction(); dedu

我有一个类
演绎
,它的属性
序列
int
类型:

public class Deduction
{
   private int _sequence;
   public int Sequence
   {
      get { return _sequence; }
      set { _sequence = value; }
   } 
   ...
}
现在我有一个
演绎
类型的对象,其
序列
属性的值为1:

Deduction deduction = new Deduction();
deduction.Sequence = 1;
现在我有了一个
int
类型的变量
newSequence
,其值为-1:

int newSequence = -1;
我想取
extraction
对象的
Sequence
属性的当前值,添加1并将结果存储在
newSequence
变量中。所以我写了这段代码:

newSequence = deduction.Sequence++;
但我发现上面的代码将
演绎
对象的
序列
属性的值从1更改为2,而我预期它将保持在1

而且上面的代码将
newSequence
的值从-1更改为1,而我希望它将更改为
2

这很奇怪。有人能解释一下这是怎么回事吗


谢谢

++
增加它旁边的值。如果在变量/属性后面有运算符(
++
),则变量在赋值后递增1。如果赋值前有
++
,则变量在赋值前增加

看起来你要找的是
newSequence=declutation.Sequence+1

来自:

递增运算符(++)将其操作数递增1。增量 运算符可以出现在其操作数之前或之后:++变量和 变量++。备注第一种形式是前缀递增操作。 运算的结果是操作数完成后的值 已递增。第二种形式是后缀增量操作。 操作的结果是操作数在被删除之前的值 已递增。数字和枚举类型已预定义 增量运算符。用户定义的类型可以重载++运算符。 枚举中通常允许对整型进行操作


你可能忽略了这一点。通过将操作数放在末尾,赋值就完成了,然后是增量。

++
是变量后面的post增量运算符,这意味着增量发生在赋值之后

newSequence = deduction.Sequence++;
您正在将
扣减.Sequence的旧值赋值给
newSequence
,然后递增
扣减的值。Sequence

如下:

newSequence = deduction.Sequence++;
相当于:

newSequence = deduction.Sequence;
deduction.Sequence = deduction.Sequence + 1;
现在更有意义了吗

如果您这样做:

newSequence = ++deduction.Sequence;
它变成这样:

deduction.Sequence = deduction.Sequence + 1;
newSequence = deduction.Sequence;
正如其他人所说,您可能不希望更改
演绎.Sequence
,因此您希望使用以下方法:

newSequence = deduction.Sequence + 1;

你读过吗?@AlexM。你应该解释一下什么是不好的。你可以把
variable++
读作:“首先给我变量的值,然后是增量变量”,而
++variable
可以读作:“增量变量,然后给我它的(已经增量的)值”。@PieterWitvoet这是不正确的。变量始终递增,然后返回一个值。改变的是它是返回原始值还是增量值。当考虑多个侧面效应的语句时,这一点很重要。C++的行为与此不同吗?