作者:伤心脑残猪_940 | 来源:互联网 | 2023-05-17 11:54
在C#中,类型实例变量的默认值是int?
什么?
例如,在以下代码中,MyNullableInt
如果从未明确分配,将具有什么值?
class MyClass
{
public int? MyNullableInt;
}
(似乎答案几乎肯定是null
或者0
,但是那些是什么?)
1> Jon Schneide..:
int?
- 和任何使用"type?"的可空类型的默认值 声明 - 是null
.
为什么会这样:
int?
是Nullable (其中T是int
),一个结构的类型的语法糖.(参考)
该Nullable
类型有一个bool HasValue成员,当它false
使Nullable
实例"表现得像"一个null
值时.特别是,当将with 与实际值进行比较时,将 覆盖Nullable .Equals方法以返回.true
Nullable
HasValue == false
null
从C#语言规范11.3.4开始,结构实例的初始默认值是所有结构的值类型字段设置为其默认值,并且所有结构的引用类型字段都设置为null
.
bool
C#中变量的默认值是false
(reference).因此,HasValue
默认Nullable
实例的属性是false
; 这反过来使该Nullable
实例本身就像null
.
@JonSchneider足够公平,我的不好
2> Brian Ogden..:
分享Nullable.GetValueOrDefault()
使用Nullable
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());