国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網 會員登陸 & 注冊

第 84 講:C# 2 之 bool 類型實例的 switch 語句用法

2022-01-31 12:48 作者:SunnieShine  | 我要投稿

真香,真香……

Part 1 為什么 switch 早期不能判斷 bool

早期 switch 語句只讓使用對整數類型和字符串類型進行 switch 判斷,而 bool 和浮點數是不行的。浮點數不能用 switch 的原因很簡單,因為比較的數據是沒辦法精確表達的,所以這樣會導致很多很隱蔽的問題;而 bool 不能用的原因是,分支太少。

考慮 bool 用在 switch 里,會如何?

一個 case truecase false 就能表示完全的情況,但 default 此時就沒有意義了:因為永遠都不可能遇到了,前面?zhèn)z都能直接處理掉。所以,原因就是:分支太少。少到壓根用不到 default,也確實沒必要:條件運算符 ?:if-else 完全可以應付這種小場面,你說是吧。

因此,C# 最開始的規(guī)則是不允許 bool 和浮點數作為判斷的;而 charstring、整數類型都是可以使用 switch 的。

Part 2 為什么 C# 2 又可以這么寫了呢?

C# 2 允許了 bool 作為 switch 的判斷。當然,它肯定是不讓你 case truecase false 都有了的情況下還寫一句 default 的。C# 2 規(guī)定,switch 判斷 bool 量的時候,只有如下三種情況:

  • case truedefaultdefault 等價 case false);

  • case falsedefaultdefault 等價 case true);

  • case truecase false。

這三種情況,兩種標簽判斷是可以同時出現的,而 case true、case falsedefault 不允許三種混用。

那么,為什么這種機制在 C# 2 里又可以用了呢?因為三值布爾 bool? 類型在 C# 2 里騰空出世。C# 2 的三值布爾類型就是可空的 bool 類型;而 bool 類型有兩種取值情況,再算上 null,三值布爾一共是三種取值情況:truefalsenull。如果還不開放的話,未免就顯得很難用:

顯然 c == 數值 就不必寫兩次。有了 switch,代碼的可讀性會提高不少:

當然,這里你寫 case null: 代替 default: 也是可以的。

多了一種情況后,單純的 truefalse 判斷就不夠了,因為還多了一個 null 的判斷情況。

Part 3 性能上和 if 語句還有 ?: 的區(qū)別

那么,?:if 這種單純的格式,和 switch 寫起來,有什么區(qū)別嗎?

3-1 boolswitch 語句

明確地告訴你,沒有區(qū)別。我們來看這個代碼:

它最終會被編譯器改寫成這樣:

是吧,是一樣的吧。

3-2 bool?switch 語句

你可能會問三值布爾的情況。假設代碼是這樣:

它會被編譯器改寫代碼成這樣:

三值布爾運算總歸是可空值類型吧,所以它也具有 HasValueGetValueOrDefault 這些相關的成員。稍微注意一下,GetValueOrDefault 方法將獲取 bool? 類型的真正存儲數值;如果失敗,則獲取當前類型的默認數值(也就是 default(T) 表達式的結果)。因此,不論有沒有數值,bool? 類型也會通過這個方法返回 bool 的結果。

Part 4 沒了?

嗯,沒了。


第 84 講:C# 2 之 bool 類型實例的 switch 語句用法的評論 (共 條)

分享到微博請遵守國家法律
宝山区| 突泉县| 黄平县| 阜新| 酉阳| 陆丰市| 无棣县| 庆安县| 普兰店市| 应用必备| 巴青县| 汝城县| 明溪县| 清水河县| 余姚市| 花莲市| 舞阳县| 万荣县| 尼玛县| 金寨县| 靖远县| 乐安县| 新竹市| 利川市| 奎屯市| 黑山县| 遂宁市| 秦皇岛市| 雷州市| 巴楚县| 辉南县| 花垣县| 华池县| 博乐市| 邻水| 德令哈市| 保定市| 灌云县| 高唐县| 潼南县| 青川县|