可为空的值类型(Nullable value type)

可为空的值类型T? 包括了基础类型的值加上空值null.例如你可以将null,true,false 这三个可能的值赋给bool?类型的变量。可为空的值类型是泛型结构体 System.Nullable的实例。
可为空的值类型存在的意义?
需要表示基础值类型的未定义值时,通常使用可为空的值类型。 例如,布尔值或 bool 变量只能为 true 或 false。 但是,在某些应用程序中,变量值可能未定义或缺失。 例如,某个数据库字段可能包含 true 或 false,或者它可能不包含任何值,即 NULL。 在这种情况下,可以使用 bool? 类型。再比如再数据库的表中存在EndDate的列,它的值是为未来的某个时间点。则可以用int?类型,其现在的初始值为null。
可为空的值类型的声明和复制

double? pi = 3.14;
char? letter = 'a';
int m1 = 10;
int? m2 = m1;
bool? flag = null;
//Nullable value type array
int?[] arr = new int?[10];

可为空的值类型的默认值为null.
检测可为空的值类型的实例的3种方式

//1.is 操作符和类型模式搭配使用
int? a = 42;
if(a is int valueofA)
{
	// a是非null的int型,其值为valueofA
}
else
{
	// a为null
}
//2.通过泛型结构体的properties判断
int? a = 42;
if(a.HasValue)
{
	// a是非null的int型
}
else
{
	// a为null
}
//3.
int? a=42;
if(a != null)
{

}
else
{
}

将可为空的值类型转换为其基础值类型的3种方式

//1.通过NULL合并操作符 ??
int? a = 28;
int b = a?? -1;
//b is 27.
int? c= null;
int d = c?? -1;
//d is -1
//2.通过泛型结构体的Nullable<T>.GetValueOrDefault() 方法
int ? a = 28;
int b = a.GetValueOrDefault() -1;
//b is 27.
int? c= null;
int d = c.GetValueOrDefault() -1;
//d is -1

//3.显示强制转换
int? a = null;
int b = a; //编译失败
int b = (int)a;//编译通过,但是运行时抛InvalidOperationException
上一篇:C#可空类型及其衍生运算符


下一篇:Android基础——Fragment的创建和添加