嗨,在我看来,我的对象的属性应该是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;
}
在我看来这应该是值.Property = value.Property ++;首先将value的值和此对象的increment属性赋值,为什么id不起作用?
答案 0 :(得分:7)
这是做什么的:
value.Property
(结果为1)并记住结果 value.Property
(现在等于2)value.Property
(现在再次等于1!)如果将Property
更改为具有显式getter和setter的属性并将一些调试代码放入setter中,您将看到它确实更改了值1 - > 2 - > 1。
如果您将value.Property++
更改为++value.Property
,前两个步骤将会颠倒,所以我们会:
value.Property
(现在等于2)value.Property
(它仍然是2)value.Property
(它仍然是2)当然,这是不必要的复杂,甚至可以说是错误的。如果你想增加Property
,你所要做的就是:
++value.Property;
答案 1 :(得分:4)
因为valueProperty++
与以下内容相同:
int Increment(ref int value)
{
var temp = value;
value = value + 1;
return temp;
}
答案 2 :(得分:0)
value.Property = value.Property++;
这里的value.Property ++意味着它在递增之前协助1。
答案 3 :(得分:0)
因为=运算符低于运算符优先级的顺序而不是递增。
http://msdn.microsoft.com/en-us/library/6a71f45d.aspx< - 显示运算符及其优先顺序。
首先完全评估增量。然后,增量的返回值通过=运算符。