close

在 .Net 中, value type與 reference type 有一個很大的差別,就是 value type 並沒有所謂的 null 值,但 reference type 則有。但是在某些情況裡,會需要 value type 的變數也能指定 null 值。一個最經典的例子就是資料庫,資料庫的欄位是可以允許 null 的情況發生,例如電子商務網站的會員資料表裡,有一欄位是會員的年收入,這一欄假設允許會員不填寫,那會員不填寫時該存什麼?存零的話,那在做會員平均收入時就會有誤差,這個時候系統應該存入 null 值。但之後撈取資料時就會有一個問題,假設年收入的資料型態是 integer ,遇到 null 值時就沒辦法表示,如同前面所言,填零的話資料就會失真。

針對這樣的情況,在 C# 2.0 時就加入了 Nullable Types 。 C# 已經邁入 5.0 版,相信這個功能很多人都已經知道,但大部份的人或許不知道 Nullable Types 是如何被實作出來的。

下列的兩行程式碼,在對編譯器而言是一模一樣的。

int? int1 = 1;
Nullable<int> int2 = 1;

也就是說, int? 等同於 Nullable<int> ,而 Nullable 其實是 Struct 而不是 Class 。而 Nullable Types 還有一些好用的功能,像是:

Nullable<int> int2 = null;
Console.WriteLine(int2.GetValueOrDefault());

而執行的結果是零,這樣的好處在於不用再額外判斷該變數是否為 null 。

最後再介紹一個好用的運算子: ?? 。

int? int1 = 5;
Nullable<int> int2 = null;
Console.WriteLine(int1 ?? int2);

因為 int2 是 null ,所以執行結果為 5 。

另一個情況下,這個運算子也很好用。

string str1 = null;
Console.WriteLine(str1 ?? "未設定");

在 str1 為 null 的情況下,執行結果就是”未設定”,這樣的寫法也可以讓程式碼較為簡潔。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 卑微研究生 的頭像
    卑微研究生

    卑微研究生的部落格

    卑微研究生 發表在 痞客邦 留言(0) 人氣()