在C# 2.0里面的數據類型中,分為值類型和引用類型,引用類型可以初始化為null,可是值類型是不可以的。
比如經常用到的System.Guid類型,要么賦值為Guid.NewId,要么賦值為Guid.Empty。
再比如System.DateTime,默認初始化為DateTime.MinValue。
強行給值類型賦null值,編譯就不會通過,會報出類似下面的異常:
錯誤 1 無法將 NULL 轉換成“System.DateTime”,因為它是一種值類型
這個時候就要借助Nullable<T>結構體了。
拿DateTime舉例,完整的寫法:
Nullable<DateTime> now = DateTime.Now;
Nullable<DateTime> now = null;
當然也可以縮寫:
DateTime? now = DateTime.Now;
DateTime? now = null;
我們可以直接對now賦值,但實際上是給now.Value賦值。
既然可以為空,就涉及到判斷了,以下兩種方式都是可行的:
if (now != null) {}
if (now.HasValue()) {}
有一點需要注意的是,值類型可以通過這種方法變成引用類型,但是引用類型不可以喲。比如下面這段代碼:
Nullable<string> test = "ddd";
這段代碼編譯無法通過,會報出以下異常:
錯誤 1 類型“string”必須是不可為空的值類型才能用作泛型類型或方法“System.Nullable<T>”中的參數“T”
posted on 2010-09-30 09:27
無聲 閱讀(6367)
評論(0) 編輯 收藏