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;