class BoxingAndUnboxing
{
static void Main()
{
Nullable<int> nullable = 5;
object boxed = nullable; //装箱成有值的可空类型的实例
Console.WriteLine(boxed.GetType());
int normal = (int)boxed; //拆箱成非可空变量
Console.WriteLine(normal);
nullable = (Nullable<int>)boxed; //拆箱成可空变量
Console.WriteLine(nullable);
nullable = new Nullable<int>();
boxed = nullable; //装箱成“没有值的可空类型的实例"
Console.WriteLine(boxed == null);
nullable = (Nullable<int>)boxed; //拆箱成可空变量
Console.WriteLine(nullable.HasValue);
}
}
输出
System.Int32 //装箱值的类型是System.Int32 而不是Sytem.Nullable<System.Int32>
5 //可拆箱成非空变量 默认值为5
5 //也可拆箱成可空变量 默认值为5
True // 装箱成没有值的可空的实例 与 null比较 是等价的
False // 拆箱成可空变量时没有值