第一个逻辑表达式为true是意料之中的,而第二个表达式为false就有些意料之外了,但仔细想一下,就会感觉有它存在的道理。我们都知道int?就是Nullable<int>的缩写,而在.Net Framework中Nullable<T>实现其实是一个继承自值类型的结构,只是这个结构多了个属性HasValue,用来标识结构中是否有值,这样再理解上面的结果就不奇怪了,因为语句object b = a;会有一个装箱操作,也就是b中的引址为指向装箱后的a结构,而不是空引用,因此就会有上面的结果了。
这点只是C#语言中的一些小细节,但在很多时候可能会引起些不可以预料的事果,比如微软发布的DataAccessBlock中用来把存储过程的参数数组的时候SqlHelper中的代码
总的来讲可空类型为我们提供了很大的方便,特别是在对数据库的可空字段的操作提供了方便,但使用时应注意上面的情况才能作到万无一失。