【问题标题】:Value of unassigned non-nullable variable (C#)未分配的不可为空变量的值 (C#)
【发布时间】:2010-05-28 13:19:25
【问题描述】:

只是好奇。

如果你去:

string myString;

它的值为空。

但如果你去:

int myInt;

这个变量在C#中的值是多少?

谢谢

大卫

【问题讨论】:

  • 一个简单的测试就足够你自己回答了。
  • 我认为答案的质量已经证明了问题的价值。

标签: c# non-nullable unassigned-variable


【解决方案1】:

首先,请注意,这仅适用于字段,而不适用于局部变量 - 至少在 C# 中,它们在分配之前无法读取。实际上,如果您设置了适当的标志,CLR 会将堆栈帧初始化为 0 - 我相信这是默认设置。但它很少被观察到 - 你必须经历一些令人毛骨悚然的黑客攻击。

int 的默认值是 0 - 对于任何类型,它本质上是由一个全零的位模式表示的值。对于值类型,这相当于调用无参数构造函数,对于引用类型,这是 null。

基本上,CLR 用零擦除内存。

这也是default(SomeType)为任何类型给出的值。

【讨论】:

  • 和 +1 表示字段/变量的区别
  • 当我写这个问题时,我指的是局部变量而不是字段,但由于我不知道这方面的区别,所以我没有说清楚。我不知道 int 字段被初始化为零 - 感谢您提供的信息。
【解决方案2】:

int 的默认值为 0

【讨论】:

    【解决方案3】:

    int 的默认值为 0。

    在此处查看每种类型的默认值的完整列表:http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx

    【讨论】:

      【解决方案4】:

      下面是 C# 中值类型的默认值表: http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx 引用类型默认值通常为 null。

      【讨论】:

        【解决方案5】:

        String 是一种引用类型。 Int 是一种值类型。引用类型只是指向堆的堆栈上的指针,它可能包含也可能不包含值。值类型只是堆栈上的值,但它必须始终设置为某个值。

        【讨论】:

          【解决方案6】:

          T 类型的未初始化变量的值始终为 default(T)。对于所有引用类型,这是 null,对于值类型,请参阅 @Blorgbeard 发布的链接(或编写一些代码来检查它)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-04-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多