赋值前局部变量的值是多少?

本文关键字:多少 局部变量 赋值 | 更新日期: 2023-09-27 18:09:33

我知道引用类型的默认值是null,值类型的默认值如下表:http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx.

我也知道,在c#中,实例字段是自动初始化的,而局部变量不是。我也知道编译器会强迫你在读取一个局部变量之前赋值。

我很好奇局部变量在赋值之前的值是多少。它是否设置为默认值,即使编译器希望您显式地分配一个值,或者它只是随机的位?

赋值前局部变量的值是多少?

它实际上取决于IL标志。MS c#编译器当前的总是设置这个标志,所以内存实际上被设置为零。然而,从技术上讲,它没有理由这样做。不管怎样,这都是一个实现细节:你不能只用 c#就找到这个问题的答案,因为c#不允许你查询(直接或间接)没有"明确赋值"的局部值(但如果你使用ILGenerator或类似的方法直接在IL中创建一个方法,你可以)。

标志是.locals init (...)中的init

编辑:澄清- CLI规范要求所有可验证的方法都有.locals init,而不仅仅是.locals:所以没有这个,代码将无法验证,即使它是正确的。