可以为 null 的类型

1 //编译错误,无法将 Null 转换成“int”,因为它是一种不可以为 null 值的类型。
2 //由于值类型的容量只够表示适合于该类型的值,因此它不可为空;值类型没有表示空值所需的额外容量。
3   private int one = null;
4
5
6 //编译通过,T? 语法是 Nullable<T> 的简写,此处的 T 为值类型。 这两种形式可以互换。Nullable<T> 结构支持只将一个值类型用作可以为 null 的类型
7   private int? two = null;
8
9 public void Test()
10 {
11 //如果two变量包含值,则 HasValue 属性返回 True;或者,如果two变量的值为空,则返回 False。
12 if (two.HasValue)
13 {
14 //如果已赋值,则 Value 属性返回该值。 否则,将引发 System.InvalidOperationException。
15 one = two.Value;
16 }
17 //GetValueOrDefault()返回值:如果 HasValue 属性为 true,则为 Value 属性的值;否则为当前 Nullable<T> 对象的默认值。
18 //默认值的类型为当前 Nullable<T> 对象的类型参数,而默认值的值中只包含二进制零。
19 one=two.GetValueOrDefault();
20
21 //使用 ?? 运算符分配默认值,在将当前值为 null 的可以为 null 的类型赋值给不可以为 null 的类型时,将应用该默认值.
22 int four = two ?? 1;
23 }
24
25 //编译错误,类型“string”必须是不可以为 null 值的类型才能用作泛型类型或方法“System.Nullable<T>”中的参数“T”
26 // 无法创建基于引用类型的可以为 null 的类型。 (引用类型已支持 null 值。)
27 private System.Nullable<string > three = null;
28
29 /**
30 * 应用:根据具体环境,使用可以为 null 的类型来表示存在或不存在的事物。
31 * 数据库表的某个可空列可能存在于表的某一行中,但不存在于另一行中。
32 * 可将该列表示为类中的一个字段,并可以将该字段定义为值类型。 该字段可包含列的所有有效值,
33 * 但不能提供一个附加值来表示列不存在。 在这种情况下,应将该字段定义为可以为 null 的类型,而不是值类型。
34 */

 主要是在实体Model创建时去选择 是用值类型 还是使用可为null 的类型

原文地址:https://www.cnblogs.com/bizprosdd/p/1895277.html