C#6.0新增的特性 NULL條件運算符 ?.數組
以前咱們在須要判斷某個對象是否爲空的是這樣的spa
Person per = null; if (per != null) { Console.Write(""); }
若是咱們不這樣判斷的話,那麼你就會獲得一個 System.NullReferenceException 錯誤,3d
固然你也可使用三元運算符code
string str=person == null ? null :person.Name 對象
可是在C#6.0的時候推出 NULL條件運算符,這樣就使咱們少寫了不少代碼,增長了咱們不少的工做效率blog
?. NULL條件運算符索引
Person per = null; string name = per?.Name;
若是咱們這樣寫的話,一樣也能夠判斷是否爲空,代替了if的判斷和簡化了三元運算符的操做string
例子:it
咱們嘗試一下,在一個集合中io
List<Person> person = new List<Person>() { new Person{ Name="張三",Age=12}, new Person{ Name="李四",Age=12}, new Person{ Name=null,Age=13}, new Person{ Name="張三",Age=12}, };
咱們須要查找姓是李的人,若是咱們不使用NULL條件運算符,結果是..
不出意料,由於Name中存在NUll值,因此獲得了一個System.NullReferenceException
此次咱們加上NULL條件運算符,結果...
加上NULL條件運算符以後,返回類型發生了改變,變成了Nullable<T>,若是咱們還須要原來的類型,只須要和空運算符一塊兒使用就能夠了
由於返回的是bool類型,那咱們看一下false返回的是什麼
就會返回符合條件的值
若是爲true又會返回什麼呢
咱們能夠清晰的能夠看到,爲true的時候,不只返回符合條件的數據,同時也返回了Name爲空的值
?[
NULL運算符不但可使用?.訪問對象的屬性和方法,還可使用?[監測數組或包含索引器的對象是否爲空
int[] are = new int[5] { 2, 3, 5, 7, 4 }; int? value = are?.Length; int? result = are?[0];
NULL條件運算符返回的類型是Nullable<T>,咱們不想要這樣的類型的話須要配合 ?? 空運算符使用
?? 空運算符
int[] are = new int[5] { 2, 3, 5, 7, 4 }; int value = are?.Length??0; int result = are?[0]??0;