【发布时间】:2019-12-01 04:23:06
【问题描述】:
我找到了很多关于静态的文章(MSDN、MSDN 2、Stack Overflow 等等),但我仍然不明白为什么这段代码会返回 -1:
class Program
{
static int value = 0;
static int foo()
{
value = value - 7;
return 1;
}
static void Main(string[] args)
{
value -= foo();
Console.WriteLine(value);
Console.ReadKey();
}
}
这是调试器在foo() 运行之后但在从value 中减去结果之前显示的内容:
但一步之后,value 是-1:
我希望-8 因为静态字段存储在内存中一次。
当我把它改成
var x = foo();
value -= x;
它显示-8
这究竟是如何工作的?
【问题讨论】:
-
@pappbence96 这正是他所期望的,但没有得到。
-
仅供参考,这与静态无关。
-
已经调试过了,当方法结束时,值 = -7,但下一步它神奇地更改为“-1”。这就是看不懂的问题
-
value -= foo()与value = current value of value (0) - foo() which returns 1相同,与value = 0 - 1相同。foo()确实减少了value,但只有在之后您在调用foo()的计算中引用了它。糟糕的解释让人难以理解,但简而言之就是这样。 -
像
i += i++;这样的语句本质上是含糊不清的。一些语言有法律术语,可以很好地定义这些语句,而其他语言(臭名昭著的 C 系列)只是说:“操作数评估的顺序是未定义的。” 不管你的语言属于哪个类别,以这种方式模棱两可的代码都不应该编写,因为它很难理解。
标签: c#