五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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 語句用法的評論 (共 條)

分享到微博請遵守國家法律
巴彦县| 西吉县| 赣榆县| 冀州市| 广东省| 江油市| 黄梅县| 抚州市| 永泰县| 新沂市| 郸城县| 芜湖市| 阜阳市| 乐平市| 京山县| 宁远县| 平原县| 罗田县| 弋阳县| 新兴县| 桂平市| 宁明县| 长治县| 兴城市| 南澳县| 白山市| 积石山| 霍城县| 介休市| 昌平区| 巩留县| 玉林市| 大兴区| 当涂县| 大悟县| 龙山县| 漠河县| 多伦县| 延长县| 图们市| 探索|