Welcome

首页 / 软件开发 / .NET编程技术 / CLR笔记:18.可空值类型

CLR笔记:18.可空值类型2011-10-26 博客园 包建强前言:System.Nullable<T>在FCL中的实现:

System.Nullable<T> where T:struct,所以Nullable<T>是一个值类型

有两个只读属性HasValue和Value,以及GetValueOrDefault方法

18.1

C#语法:Int32? 等价于 Nullable<Int32>,于是可以有:

    Int32? a = 5;    Int32? b = null;
允许类型转换:Int32 c = (Int32)a;

允许 可空基元类型之间的类型转型:

        Double? d = 5;        Double? e = b;
允许对可空类型实例使用操作符。

18.2

??,空接合操作符,用法Int32 c = a ?? b; 表示如果a不为null就返回a;否则返回b

18.3

对Nullable<T>装箱,要么返回null,要么返回已经装箱的T

对已经装箱的T拆箱,或者为T,或者为Nullable<T>。对于后者,CLR要分配内存,以容纳 Nullable<T>的hasValue和Value字段

一个Nullable<T>对象,GetType()返回的类型是T,而不是Nullable<T>

通过可空值类型调用接口方法:

Int32? n = 5;Int32 result = ((IComparable)n).CompareTo(5);
这里,n是Nullable<T>类型,Nullable<Int32>并未实现IComparable<Int32>,但 是C#中会先将隐式转换为Int32,因为Int32实现了IComparable<Int32>接口,所以以上代码可以编 译。