C#中的Nullable類型(翻譯)

來源:互聯網
上載者:User
 

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? x = 125;

看起來很簡單啊。同樣,需要寫個小小的測試來講述使用,如下:

if (x.HasValue) {...}

 

你可以這樣來寫判空語句了

if (x != null) {...}

 

最後,我們也可以更容易地寫運算式了。

如果我想把兩個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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.