程式碼高𠅙

2009/04/23

C # 裡面 ?? (雙問號)運算子的妙用

?? 運算子是在 2.0 版後新增的,至今我在別人的程式中還很少看到有在使用。
它的使用方式如下:

a = b ?? c;

上式的意思是,如果 b != null,那就把 b 的值指定給 a,否則就把 c 的值指定給 a。
照理講,?? 的功能完全可以由 ?: 運算子替代,如上式可以改寫如下:

a = b != null ? b : c;

不過,?? 對於簡化程式碼很有幫助,我相信許多 one liner 會很喜歡它,例如:

if (Session["WEB_TYPE"] == null)
{
Session.Add("WEB_TYPE", "");
}

可以改寫為:

Session["WEB_TYPE"] = Session["WEB_TYPE"] as string ?? "";

?? 的另一個特點是使用上可以串連,例如:

string a = null;
string b = null;
string c = "c";
string d = a ?? b ?? c;

這樣的意思,也就是由左到右,找到第一個非 null 值的變數,指定給 d。

於是,如果有一段程式如下 (抓取系統中的舊程式碼舉個例子):

if (Session["WEB_TYPE"] == null)
{
Session.Add("WEB_TYPE", "");
}

//接收 Web_type
if (!IsPostBack)
{
if (Request.QueryString["WEB_TYPE"] != null)
{
webtype = Request.QueryString["WEB_TYPE"].ToString();
Session["WEB_TYPE"] = webtype;
}
}

可以用 ?? 運算子改寫成以下版本:

Session["WEB_TYPE"] = Session["WEB_TYPE"] as string ?? Request.QueryString["WEB_TYPE"] ?? "";

這樣程式就精簡許多,也更好理解與維護了。

2009/04/22

在麥當勞看了一場戲

一個皮膚黝黑的男子,兩眼無神的呆坐在餐飲區的一角。
一個體格壯碩的男子帶著一個清瘦的女生走了進來,坐在黝
黑男子的身旁,對他交待了幾句,拍拍了那女生的肩,便走
開了。

那男的哭喪著臉,哀求的詢問著那女生,那女生正顏厲色的
反過來詰問那個男的… 那男的無言以對,熱淚涔涔而下,
這種狀況來回幾次,那男的奪門而出。

那個壯碩的男子回來,再度拍拍那女生的肩,安慰她幾句,
再度離去把那女生留在現場。

最後,另一個面容白晰的男生走了進來,拉著那女生的手,
摟了摟那女生的肩,聊了幾句。那女生嘆了口氣,如釋重負
般的站了起來,那男生也跟著站了起來,兩個人牽著手,漫
步離開現場。