C 中雙問號(??)在檢測Null方面的帶來的方便

2021-06-08 18:29:40 字數 1170 閱讀 4860

最近接到乙個維護專案,發現裡面超多bug,基本都是nullreferenceexception突然想起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(***==null)的判斷,特別是在資料控制項中繫結資料時,由於不能寫語句,只能寫表示式,更加發揮出了雙問號(??)的作用。

C 中雙問號(??)在檢測Null方面的帶來的方便

c 中雙問號 在檢測null方面的帶來的方便 最近接到乙個維護專案,發現裡面超多bug,基本都是nullreferenceexception突然想起c 中有個雙問號 的單元運算子,用於解決這個問題實在是方便的很。首先,既然雙問號 是乙個單元運算子,那麼其左右兩邊資料型別必須是相同型別或能 轉換型別的...

塗膠檢測在鋰電池方面的應用!

塗膠檢測的方法有很多,接下來為大家介紹其中一種。現代科學技術的迅猛發展帶來了社會各界繼續增長。電池作為人們日常生活和工作中的必需品之一,具有多種功能,如大到機械裝置中的電池,小到手錶等電子產品中的鋰電池,所以今天我們來講的就是塗膠檢測在鋰電池上的應用 家用電池作為最常用和最廣泛銷售的電池之一,對人們...

在C和C 中NULL的區別

1.在c和c 中特定指標與通用指標相互賦值的問題 特定指標 如 int char float 通用指標 如 void int main 2 在c中,通用指標可以賦給特定指標,但在c 中,通用指標不可以賦給特定指標,在c 中這樣規定是為了杜絕不同型別的指標相互賦值 2.c和c 中的null的不同定義 ...