int a=7;
int? b=5;
int? c=null;

a is int、a is int?、b is int、b is int?  都为true。   c is int、c is int? 为false

可空类型装箱(box)后,其值为基础类型
object obj1=a, obj2=b, obj3=c;  obj1和obj2的类型都是整数。 obj3为null
obj1 is int、obj1 is int? 都为true。  obj3 is int 为false

 

装箱和取消装箱

在对可以为 null 的类型进行装箱时,公共语言运行时自动将 Nullable<T> 对象的基础值(而不是 Nullable<T> 对象本身)装箱。 也就是说,如果 HasValue 属性为 true,则将 Value 属性的内容装箱。 在对可以为 null 的类型的基础值进行取消装箱时,公共语言运行时创建一个新的初始化为基础值的 Nullable<T> 结构。

如果可以为 null 的类型的 HasValue 属性为 false,则装箱操作的结果为 null。 因此,如果将已装箱的可以为 null 的类型传递给需要对象参数的方法,则该方法必须准备处理参数为 null 的情况。 如果对 null 进行取消装箱使其成为可以为 null 的类型,则公共语言运行时会创建一个新的 Nullable<T> 结构并将其 HasValue 属性初始化为false。

 

posted on 2018-04-23 09:58  五星  阅读(122)  评论(0)    收藏  举报