C#中雙問號(??)語法

雙問號(??)是一個單元運算符,其左右兩邊數據類型必須是相同類型或能隱形轉換類型的。意思是,首先檢測左邊的值,若爲Null,那麼整個表達式取值爲右側的值,否則爲左側的值。

   例如:string s = null; Console.Write(s ?? "abc");。將打印出"abc"。

   例如string s = "a";Console.Write(s ?? "abc");將打印出"a"。

   

 下面將對項目中的一些實例進行詳細的分析並改進代碼:

   

 示例一:<%# Eval("JBQK_DXXL").ToString() == "本科" ? Eval("JBQK_DXXLSJ") : ""%>。

   這個是在數據綁定控件中很常見的綁定數據的代碼,錯誤也很明顯,當JBQK_DXXL爲null時,將報NullReferenceException異常。若不用雙問號(??)的話,修改後的代碼將類似於

   <%# (Eval("JBQK_DXXL") != null && Eval("JBQK_DXXL").ToString() == "本科") ? Eval("JBQK_DXXLSJ") : ""%>

   而使用雙問號(??)後,代碼將如下:

   <%# (Eval("JBQK_DXXL") ?? string.Empty).ToString() == "本科" ? Eval("JBQK_DXXLSJ"): ""%>

  

 示例二:entity.ZXX.Contains("高中")

   錯誤同樣明顯,entity.ZXX爲空,報NullReferenceException異常。

   不用雙問號(??)的話,需要先檢測空,if(entity.ZXX!=null)

   而使用雙問號(??)代碼如下:

   (entity.ZXX ?? string.Empty).Contains(item.Text)

   

 示例三:賦予默認值

   在給一個變量賦值的時候,可以用雙問號(??)來起到設置默認值的作用。

   string s = entity ?? string.Empty;

   總結下來,就是省去了if(XXX==null)的判斷,特別是在數據控件中綁定數據時,由於不能寫語句,只能寫表達式,更加發揮出了雙問號(??)的作用。


發佈了40 篇原創文章 · 獲贊 7 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章