可空类型Nullable
Nullable类型:
值类型变量默认为0,不可空,为了使它可空,出现了Nullable类型,类型前面加? 变为引用类型
值类型是没有null值的,比如int,DateTime,它们都有默认值。举个例子,在访问数据库时,会存在一定的问题,Person类有字段Age(int类型),Birthday(DateTime),如果没有给它们赋值,我们期望的是向数据库插入时,应该是null,而不是0和0001-01-01;同样从数据库取值时也是如此,如果数据值为null,我们也希望Age和Birthday的值能反应出来,如果不使用int?和DateTime?就做不到。
Nullable 类型(结构体)是System.Nullable<T> 这种结构体的实例,一个Nullable类型可以代表他的值类型的正确的范围,同时添加了为“空”的值。
例如,一个Nullable<Int32>,声明了“Int 32的可空类型”,可以被赋值“-2147483648 to 2147483647”,或者可以被赋值 空。Nullable<bool> 可以被赋值“true,false,null”.对数值类型和bool类型 ,当处理数据库或者一些数据类型,不能对某些字段赋值的时候,可以赋为“null”尤为重要。例如 Boolean类型变量,在数据库可以存储"true false"或者未定义。
int? 相当于 Nullable<int>
Guid? 相当于 Nullable<Guid>
class NullableExample { static void Main() { int? num = null; // Is the HasValue property true? if (num.HasValue) { System.Console.WriteLine("num = " + num.Value); } else { System.Console.WriteLine("num = Null"); } // y is set to zero int y = num.GetValueOrDefault(); // num.Value throws an InvalidOperationException if num.HasValue is false try { y = num.Value; } catch (System.InvalidOperationException e) { System.Console.WriteLine(e.Message); } } }
OutPut:
num = Null
Nullable object must have a value.
特性:
1:可为NUll,不能创建一个可空类型基于一个引用类型
2:语法T?是 Nullable<T>的简写,T是一个值类型,两种形式可以相互转换。
3:for example int? x = 10;
or double? d = 4.108.
A nullable type can also be assigned the value null: int? x = null.
4:用
-
Nullable<T>.GetValueOrDefault 返回指定值or默认值(if为null), for example int j = x.GetValueOrDefault();
-
5:用
Value(property)-->value/System.InvalidOperationException is thrown
6:== & != 可用于NUllable, if(x!=null)y=x;
7:??指定现在值为NULL的defaultValue int? x= null; int y = x??-1
8:不允许嵌套的Nullable :
Nullable<NUllable<int>> n;