C# - 三元運算式 & Nullable

Posted on 2015-01-24

一般來說判斷條件後給變數值的寫法通常是用 if else

var str = "";
if (condition)
{
    str = "abc";
}
else 
{
    str = "123";
}

如果判斷式和給值沒有什麼邏輯的話,可以改成用三元運算式來寫

var str = condition ? "abc" : "123"; 

不過,如果今天變數為 nullable of int 型別的話,要給 null 時就會出錯,錯誤的訊息為 無法確認條件運算式的類型,因為 '<null>' 和 'int' 兩者間沒有隱含轉換

int? price = condition ? null : 1;

一般來說如果遇到這個問題,可能會改成下面的寫法,直接用 0 來取代 null 或是改用 if else 來判斷

int? price = condition ? 0 : 1;

不過,如果說一定要給 null 為預設值的話,就可以用 default 這個關鍵字

int? price = condition ? default(int?) : 1;

( 比較要注意的是, default 裡面的型別要記得給 ? 就是 nullable 的型別才不會出錯 )

後記

一開始遇到 nullable 的問題,就會改用 if else 的判斷來處理,直到有一天突然想到好像可以用 default 這個關鍵字來處理預設值的問題,筆記一下…