数据库中的数字和编程语言中的数字有显著不同的特征,因为数据库中的数字可以为空,C#中的数字不能为空。Int32是一个结构,而结构是值类型的,所以它不能为空。
在C#中可以使用Nullable<T>结构很容易解决这个问题。
定义可空类型:
Nullable<int> x; int? x2;
可以检查Nullable<T>的HasValue和Value属性
Nullable<int> x; x = 4; x += 3; if (x.HasValue) { int y = x.Value; } x = null;
可空数据类型还可以使用算数运算符。变量x3是变量x1和x2的和。如果这2个可空变量中有一个的值为null,他们的和就是null。
int? x1 = GetNullableType();
int? x2 = GetNullableType();
int? x3 = x1 + x2;
将可空数据类型转换为非可空数据类型:
第一种,显示转换
int? x1 = GetNullableType();
int y1 = (int)x1
第二种,使用接合运算符转换 这个更安全些
int? x1 = GetNullableType();
int y1 = x1 ?? 0;
当使用GetNullableType()方法的时候,你会发现这样的错误信息
The name 'GetNullableType' does not exist in the current context
这个应该是GetNullableType方法的命名空间没有加入,但是这个方法具体在哪个命名空间还没有找到o(╯□╰)o