可空types“int?”(包括问号)的默认值是什么?
在C#中,types为int?的类实例variables的默认值是int? ?
例如,在下面的代码中,如果MyNullableInt从未明确分配, MyNullableInt具有什么值?
class MyClass { public int? MyNullableInt; }
(似乎答案几乎可以肯定是null或0 ,但那是哪一个呢?)
int?的默认值int? – 对于使用“type?”的任何可空types 声明 – 为null 。
为什么是这样的情况:
-
int?是typesNullable <T> (其中T是int)的结构体的语法糖。 ( 参考 ) -
Nullable<T>types有一个bool HasValue成员,当它为false,使Nullable<T>实例的行为像一个null值。 特别是, Nullable <T> .Equals方法被覆盖,以便在将HasValue == false的Nullable<T>与实际的null值进行比较时返回true。 - 从C#语言规范11.3.4中 ,结构实例的初始默认值是该结构的所有值types字段被设置为其默认值,并且该结构的所有引用types字段都被设置为
null。 - C#中
boolvariables的默认值是false( 引用 )。 因此,默认Nullable<T>实例的HasValue属性为false; 这又使得Nullable<T>实例本身的行为像null。
我觉得分享Nullable<T>.GetValueOrDefault()方法非常重要,在使用Nullable<int> aka int?math计算时,这个方法特别方便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());
var x = default (int?); Console.WriteLine("x == {0}", (x == null) ? "null" : x.ToString());