文章参考:https://msdn.microsoft.com/zh-cn/library/1t3y8s4s
对于数据值型的类型,以及结构类型,是不能够赋null值的;但是在类型后面加个?或者 System.Nullable<T> 用这种方式就可以声明这个变量是可以为null的;
可以为 null 的类型是 System.Nullable<T> 结构的实例。 可以为 null 的类型可以表示其基础值类型正常范围内的值,再加上一个 null 值。
例如,Nullable<Int32> 读作“可以为 null 的 Int32”,可以将其赋值为 -2147483648 到 2147483647 之间的任意值,
也可以将其赋值为 null 值;可以为 null 的类型的每个实例都具有两个公共的只读属性:
HasValue
HasValue 属于 bool 类型。 当变量包含非 null 值时,它被设置为 true。
Value
Value 的类型与基础类型相同。 如果 HasValue 为 true,则说明 Value 包含有意义的值。
如果 HasValue 为false,则访问 Value 将引发 InvalidOperationException。
int? x = 10; if (x.HasValue) { System.Console.WriteLine(x.Value); } else { System.Console.WriteLine("Undefined"); }转换操作:
显示的转换
int? n = null; //int m1 = n; // Will not compile. int m2 = (int)n; // Compiles, but will create an exception if n is null. int m3 = n.Value; // Compiles, but will create an exception if n is null.
隐式转换:
int? n2; n2 = 10; // Implicit conversion.这里还说明了关于运算符的一些操作:
https://msdn.microsoft.com/zh-cn/library/2cf62fcy