什么价值将具有我的对象的属性?

kos*_*kov 2 c#

嗨,在我看来我的对象的属性shouold是2,但在此代码后,仍然是1,为什么?

internal class Program
{
    private static void Main(string[] args)
    {
        MyClass value = new MyClass() { Property = 1 };

        value.Property = value.Property++;
        Console.WriteLine(value.Property);
        Console.ReadKey();
    }
}

internal class MyClass
{
    public int Property;
}
Run Code Online (Sandbox Code Playgroud)

在我看来,这应该是值.Property = value.Property ++; 首先把值放在什么值和这个对象的增量属性,为什么id不起作用?

Jon*_*Jon 7

这样做是:

  1. value.Property在右侧进行评估(结果为1)并记住结果
  2. 增量value.Property(现在等于2)
  3. 将记住的结果分配给value.Property(它现在再次等于1!)

如果您Property使用显式getter和setter 更改为属性并将一些调试代码放入setter中,您将看到它确实更改了值1 - > 2 - > 1.

如果您更改value.Property++++value.Property,前两个步骤将被逆转,所以我们倒是有:

  1. 增量value.Property(现在等于2)
  2. 评估value.Property右侧(它仍然是2)
  3. 将步骤2的结果分配给value.Property(它仍然是2)

当然,这是不必要的复杂,甚至可以说是错误的.如果你想增加Property,你所要做的就是:

++value.Property;
Run Code Online (Sandbox Code Playgroud)