C#中的Nullable類型(翻譯)
這是c#2.0語言的新特性,具體的細節可以參看C# language spec。Nullable類型用於給簡單實值型別對象賦null值或者某個未知值。這在資料庫操作中很常見,當然也會在別的地方有應用。
過去,我們也可以通過其他途徑完成我們的需求:
1.使用支援裝箱的類型。這樣我們不能用強型別,同時要用堆來安排每種類型。
2.把實值型別包成class。這是個強型別,但也要用到堆,同時你必須要寫這樣的一個包裹類。
3.包成一個結構體,同時提供對賦空的支援。這是個好的解決方案,但你也得自己寫。
為使得使用起來更簡單,在VS2005,我們介紹一種新的類型名為“Nullable”,如下:
(事實上要比下面的例子複雜得多,但是我們從簡單的開始)
struct Nullable<T> { public bool HasValue; public T Value; } |
你可以直接使用這個結構體了,我們加入了一些Nullable文法來使得結果代碼更清晰,入門文法,如下:
Nullable<int> x = new Nullable<int>(125); |
我也可以這樣寫:
看起來很簡單啊。同樣,需要寫個小小的測試來講述使用,如下:
你可以這樣來寫判空語句了
最後,我們也可以更容易地寫運算式了。
如果我想把兩個int類型對象加起來,同時也保留它們的null值,如果我沒有語言支援,我也許需要這樣寫:
Nullable<int> x = new Nullable<int>(125); Nullable<int> y = new Nullable<int>(33); Nullable<int> z = (x.HasValue && y.HasValue) ? new Nullable<int>(x.Value + y.Value) : Nullable<int>.NullValue; |
至少我認為我不得不這樣寫-- 太複雜了,我都不能完全保證這段代碼能不能正常工作。
若是僅能使用Nullable,編譯器卻沒有提供足夠的支援,上面的寫法也真是醜陋。
當然編譯器支援,你這樣寫就夠了:
int? x = 125; int? y = 33; int? z = x + y; |
原文出處:
http://blogs.msdn.com/ericgu/archive/2004/05/27/143221.aspx
MSDN相關文章:
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref2/html/T_System_Nullable.htm