赋值前局部变量的值是多少?
本文关键字:多少 局部变量 赋值 | 更新日期: 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
:所以没有这个,代码将无法验证,即使它是正确的。