CLR Via C# 3rd 阅读摘要 -- Chapter 19 – Nullable Value Types
C#'s Support for Nullable Value Types
- 原来C#中的值类型是不可以 = null的,现在如果定义Int32? x = null;类型后面价格?就可以了;
- 实际上是多了一个类型:public struct Nullable<T> where T : struct;
- Int32? 在语义上等同于Nullable<Int32>;
- C#的操作符对null的处理;
- 为了管理nullable的实例,生成了一大堆代码。
C#'s Null-Coalescing Operator
- null-coalescing操作符(??)。Int32? x = b ?? 123。如果b = null,那么 x = 123,否则 x = b;
- ??可以很好的用在组合情况下。
The CLR Has Special Support for Nullable Value Types
- 装箱Nullable的值类型,当装箱Nullable的值类型时,会检查如果为null,啥也不做返回null,否则装箱;
- 拆箱Nullable的值类型,如果引用为null设置值为null,否则拆箱;
- 在Nullable值类型上调用GetType,会用实际类型代替Nullable
返回; - 在Nullable值类型上调用接口方法,虽然Nullable
没有实现,但是如果值类型实现了接口就可以调用。
本章小结
本章讲了如何使用Nullable的值类型,为什么Nullabe<T>?其中一个理由就是与数据库内容表示的一致性。首先讲了如何使用Nullable的值类型,然后讲了??操作符,最后讲了CLR对Nullable提供了哪些特别的支持。