?? 運算子是在 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"] ?? "";
這樣程式就精簡許多,也更好理解與維護了。
沒有留言:
張貼留言