我遇到这个错误! “错误 CS0165 使用未分配的局部变量‘x’”
使用该内存位置添加到 100
的值你期望结果是什么,为什么?在不知道
x
的初始值的情况下,这将具有未定义的行为。当地人对其初始值有...复杂的规则。在 IL 中,堆栈帧是否为零是可选的(并且可以通过 C# 中的属性进行配置)。为避免此问题,C# 使用“明确赋值”规则来强制调用者在观察到该值之前为局部变量定义了一个值。所以:给x
一个值!也许是零。然后你可以加100并理解答案。
这与 fields 不同,因为字段具有隐含的零/空默认值。
注意:如果你真的想看到堆栈上的垃圾,你可以抑制它。为此,您可以将
[SkipLocalsInit]
添加到方法中,并将 int x;
替换为 Unsafe.SkipInit(out int x);
(这是一个已被 JIT 删除的无操作方法,但它满足 C# 的明确分配规则)。不过,我看不出在这里这样做有什么用处!