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

时间:2015-03-19 19:59:00

标签: c# integer nullable

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

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

class MyClass
{
    public int? MyNullableInt;
}

(似乎答案几乎肯定是null0,但其中哪一个是?)

3 个答案:

答案 0 :(得分:111)

int?的默认值 - 以及使用“type?”的任何可空类型的默认值声明 - 是null

为什么会这样:

  • int?Nullable<T>类型的语法糖(其中T是int),一个结构。 (reference
  • Nullable<T>类型有bool HasValue成员,当false时,Nullable<T>实例“的行为类似于”null“。特别是,当trueNullable<T>与实际HasValue == false值进行比较时,Nullable<T>.Equals method会被覆盖以返回null
  • C# Language Specification 11.3.4开始,结构实例的初始默认值是所有结构的值类型字段设置为其默认值,并且所有结构的引用类型字段都设置为null
  • C#中bool变量的默认值为falsereference)。因此,默认HasValue实例的Nullable<T>属性为false;这反过来使Nullable<T>实例本身就像null

答案 1 :(得分:21)

我觉得分享Nullable<T>.GetValueOrDefault()方法非常重要,这种方法在处理使用Nullable<int>又名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());

Command line showing the code above working

答案 2 :(得分:0)

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