C#中?的相關(guān)使用
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
與?相關(guān)的使用大致分為以下幾種: 1. 可空類型看標(biāo)題就能夠很好的理解這個(gè)概念:可以為空的類型。而在C#中可以為空也就是null的類型,都是引用類型,所以?對(duì)于引用類型來說,也就沒有什么存在的價(jià)值了,只能服務(wù)于值類型,使得在某些不確定的情況下,值類型擁有更好的適應(yīng)能力。也就是說,值類型也可以接受null,當(dāng)然是在使用?的前提下。使用如下,在值類型后添加?即可: int? a = null; 可以看的出,聲明為可空類型的變量,既可以接收null也可以接收正常的值類型。 2. 可空運(yùn)算符使用可空運(yùn)算符這個(gè)詞可能不是特別的合適,但一時(shí)詞窮,將就用了。其實(shí)就是?. 和?[]罷了。分別用于對(duì)象對(duì)成員的調(diào)用以及數(shù)組的索引。對(duì)象為空或者數(shù)組為空,這種情況還是挺常見的。如果按照平時(shí)的寫法大致就是。。。 if(object != null){//方法調(diào)用 但是現(xiàn)在有了可空運(yùn)算符之后,能省的就都省了,簡(jiǎn)潔到飛起來,一句代碼搞定。 object?.method(); 而且這樣的寫法更加的容易理解,在執(zhí)行方法的調(diào)用或者素組的索引之前,進(jìn)行null的判斷,如果為null,則后續(xù)的操作打斷,返回null;不為null,則繼續(xù)執(zhí)行。這樣的效率相比較if判斷也要更高一下。 3. 三元運(yùn)算符 condition?(true result):(false result)這個(gè)再熟悉不過了,但是之前一直沒有和這些歸為一類來考慮,只是機(jī)械化的使用。不同的是,三元運(yùn)算符的condition必須為bool類型,為true時(shí),返回true result;false時(shí),返回false result。需要注意的應(yīng)該就是返回的值一定要和定義類型匹配才行。 4. 空合并運(yùn)算符 ??有些情況下,獲取的值可能出現(xiàn)null,但獲取的null對(duì)于后續(xù)的程序來說無法使用。好的處理方法,應(yīng)該就是判斷一下獲取的值是否為null,為null,那么就賦一個(gè)值;不為null,就直接使用獲取的值,這樣是比較合理的操作。這里使用三元運(yùn)算符是完全可以進(jìn)行解決的,如下:
這樣獲取到oneNum永遠(yuǎn)都不會(huì)為null,對(duì)于后續(xù)的代碼而言,也是相對(duì)有好的。雖然三元運(yùn)算符可以解決,但更簡(jiǎn)潔的解決方案是使用??:
當(dāng)object.num不為null時(shí),返回object.num;object.num為null,則返回0。相比較三元運(yùn)算符而言,更加的簡(jiǎn)潔,理解性也高了不少。但是上面的使用存在一個(gè)問題,如果object為null呢?這里就可以使用可空運(yùn)算符來判斷,如下:
這樣就保證了在ojbect為null的情況下,也不會(huì)出錯(cuò)了。 總結(jié)null在很多情況下,對(duì)于程序而言都是不友好的,我們也極力地避免null的出現(xiàn)。相比較使用各種判斷語句而言,?的出現(xiàn)無疑讓代碼精簡(jiǎn)了不少,理解性也提高了很多。而且它們之間的嵌套使用(像最后一個(gè)例子)在復(fù)雜的判斷中優(yōu)勢(shì)更加的明顯。 該文章在 2021/1/30 10:40:08 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |