为什么当我用一个没有值的变量值通过引用调用函数时会报错?

问题描述 投票:0回答:1

enter image description here

我遇到这个错误! “错误 CS0165 使用未分配的局部变量‘x’”

使用该内存位置添加到 100

的值
c# function pass-by-reference
1个回答
2
投票

你期望结果是什么,为什么?在不知道

x
的初始值的情况下,这将具有未定义的行为。当地人对其初始值有...复杂的规则。在 IL 中,堆栈帧是否为零是可选的(并且可以通过 C# 中的属性进行配置)。为避免此问题,C# 使用“明确赋值”规则来强制调用者在观察到该值之前为局部变量定义了一个值。所以:给
x
一个值!也许是零。然后你可以加100并理解答案。

这与 fields 不同,因为字段具有隐含的零/空默认值。

注意:如果你真的想看到堆栈上的垃圾,你可以抑制它。为此,您可以将

[SkipLocalsInit]
添加到方法中,并将
int x;
替换为
Unsafe.SkipInit(out int x);
(这是一个已被 JIT 删除的无操作方法,但它满足 C# 的明确分配规则)。不过,我看不出在这里这样做有什么用处!

© www.soinside.com 2019 - 2024. All rights reserved.