最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

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

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

真香,真香……

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

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

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

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

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

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

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

  • case truedefaultdefault 等價 case false);

  • case falsedefaultdefault 等價 case true);

  • case truecase false。

這三種情況,兩種標(biāo)簽判斷是可以同時出現(xiàn)的,而 case true、case falsedefault 不允許三種混用。

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

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

當(dāng)然,這里你寫 case null: 代替 default: 也是可以的。

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

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

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

3-1 boolswitch 語句

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

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

是吧,是一樣的吧。

3-2 bool?switch 語句

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

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

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

Part 4 沒了?

嗯,沒了。


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

分享到微博請遵守國家法律
应城市| 榆树市| 永年县| 焉耆| 布尔津县| 南京市| 平乐县| 紫金县| 青川县| 淮阳县| 松滋市| 昌乐县| 突泉县| 通山县| 洪泽县| 渭源县| 定西市| 阿鲁科尔沁旗| 皋兰县| 惠来县| 九龙城区| 阳谷县| 泾阳县| 鹿泉市| 会昌县| 万盛区| 勐海县| 丰宁| 张家川| 松阳县| 华宁县| 揭东县| 肇源县| 永新县| 花莲市| 洛浦县| 柯坪县| 当雄县| 洞口县| 海阳市| 永济市|