c#:無法將 NULL 轉換成“System.DateTime”,因為它是一種值類型(轉)


摘自:http://www.blogjava.net/parable-myth/archive/2010/09/30/333454.html

在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”

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM