C#中?的相關使用


C#中?的相關使用

今天看了幾篇博客,學習了一下與?相關的使用,大致分為一下幾種:

1. 可空類型

看標題就能夠很好的理解這個概念:可以為空的類型。而在C#中可以為空也就是null的類型,都是引用類型,所以?對於引用類型來說,也就沒有什么存在的價值了,只能服務於值類型,使得在某些不確定的情況下,值類型擁有更好的適應能力。也就是說,值類型也可以接受null,當然是在使用?的前提下。使用如下,在值類型后添加?即可:

  int? a = null;
 a = 10;

可以看的出,聲明為可空類型的變量,既可以接收null也可以接收正常的值類型。

2. 可空運算符

使用可空運算符這個詞可能不是特別的合適,但一時詞窮,將就用了。其實就是?.?[]罷了。分別用於對象對成員的調用以及數組的索引。對象為空或者數組為空,這種情況還是挺常見的。如果按照平時的寫法大致就是。。。

  if(object != null){//方法調用
     object.method();
}
 if(array != null){ //數組索引
     int a = array[1];
}

但是現在有了可空運算符之后,能省的就都省了,簡潔到飛起來,一句代碼搞定。

  object?.method();
 array?[1];

而且這樣的寫法更加的容易理解,在執行方法的調用或者素組的索引之前,進行null的判斷,如果為null,則后續的操作打斷,返回null;不為null,則繼續執行。這樣的效率相比較if判斷也要更高一下。

3. 三元運算符 condition?(true result):(false result)

這個再熟悉不過了,但是之前一直沒有和這些歸為一類來考慮,只是機械化的使用。不同的是,三元運算符的condition必須為bool類型,為true時,返回true result;false時,返回false result。需要注意的應該就是返回的值一定要和定義類型匹配才行。

4. 空合並運算符 ??

有些情況下,獲取的值可能出現null,但獲取的null對於后續的程序來說無法使用。好的處理方法,應該就是判斷一下獲取的值是否為null,為null,那么就賦一個值;不為null,就直接使用獲取的值,這樣是比較合理的操作。這里使用三元運算符是完全可以進行解決的,如下:

  int oneNum = object.num !=null? object.num : 0;

這樣獲取到oneNum永遠都不會為null,對於后續的代碼而言,也是相對有好的。雖然三元運算符可以解決,但更簡潔的解決方案是使用??:

  int oneNum = object.num ?? 0;

當object.num不為null時,返回object.num;object.num為null,則返回0。相比較三元運算符而言,更加的簡潔,理解性也高了不少。但是上面的使用存在一個問題,如果object為null呢?這里就可以使用可空運算符來判斷,如下:

  int oneNum = object?.num ?? 0;

這樣就保證了在ojbect為null的情況下,也不會出錯了。

總結

null在很多情況下,對於程序而言都是不友好的,我們也極力地避免null的出現。相比較使用各種判斷語句而言,?的出現無疑讓代碼精簡了不少,理解性也提高了很多。而且它們之間的嵌套使用(像最后一個例子)在復雜的判斷中優勢更加的明顯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM