在C#中,int?
类型的类实例变量的默认值是什么?
例如,在以下代码中,如果从未明确指定,MyNullableInt
将具有什么值?
class MyClass
{
public int? MyNullableInt;
}
(似乎答案几乎肯定是null
或0
,但其中哪一个是?)
答案 0 :(得分:111)
int?
的默认值 - 以及使用“type?”的任何可空类型的默认值声明 - 是null
。
为什么会这样:
int?
是Nullable<T>类型的语法糖(其中T是int
),一个结构。 (reference)Nullable<T>
类型有bool HasValue成员,当false
时,Nullable<T>
实例“的行为类似于”null
“。特别是,当true
与Nullable<T>
与实际HasValue == false
值进行比较时,Nullable<T>.Equals method会被覆盖以返回null
。null
。 bool
变量的默认值为false
(reference)。因此,默认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());
答案 2 :(得分:0)
var x = default (int?);
Console.WriteLine("x == {0}", (x == null) ? "null" : x.ToString());