程式碼高𠅙

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"] ?? "";

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

沒有留言: