可空类型"int"的默认值是多少?(包括问号)?

Jon*_*der 89 c# integer nullable

在C#中,类型实例变量的默认值是int?什么?

例如,在以下代码中,MyNullableInt如果从未明确分配,将具有什么值?

class MyClass
{
    public int? MyNullableInt;
}
Run Code Online (Sandbox Code Playgroud)

(似乎答案几乎肯定是null或者0,但是那些是什么?)

Jon*_*der 124

int?- 和任何使用"type?"的可空类型的默认值 声明 - 是null.

为什么会这样:

  • int?Nullable <T>(其中T是int),一个结构的类型的语法糖.(参考)
  • Nullable<T>类型有一个bool HasValue成员,当它false使Nullable<T>实例"表现得像"一个null值时.特别是,当将with 与实际值进行比较时,将 覆盖Nullable <T> .Equals方法以返回.trueNullable<T>HasValue == falsenull
  • C#语言规范11.3.4开始,结构实例的初始默认值是所有结构的值类型字段设置为其默认值,并且所有结构的引用类型字段都设置为null.
  • boolC#中变量的默认值是false (reference).因此,HasValue默认Nullable<T>实例的属性是false; 这反过来使该Nullable<T>实例本身就像null.

  • @JonSchneider足够公平,我的不好 (4认同)

Bri*_*den 23

分享Nullable<T>.GetValueOrDefault()使用Nullable<int>aka int?值的数学计算时特别方便的方法我感到很重要.有很多次你不需要检查HasValue财产,你可以GetValueOrDefault()改为使用.

var defaultValueOfNullableInt = default(int?);
Console.WriteLine("defaultValueOfNullableInt == {0}", (defaultValueOfNullableInt == null) ? "null" : defaultValueOfNullableInt.ToString());

var defaultValueOfInt = default(int);
Console.WriteLine("defaultValueOfInt == {0}", defaultValueOfInt);

Console.WriteLine("defaultValueOfNullableInt.GetValueOrDefault == {0}", defaultValueOfNullableInt.GetValueOrDefault());
Run Code Online (Sandbox Code Playgroud)

命令行显示上面的代码工作