C#6.0新增的特性 NULL條件運算符 ?.
之前我們在需要判斷某個對象是否為空的是這樣的
Person per = null; if (per != null) { Console.Write(""); }
如果我們不這樣判斷的話,那么你就會得到一個 System.NullReferenceException 錯誤,
當然你也可以使用三元運算符
string str=person == null ? null :person.Name
但是在C#6.0的時候推出 NULL條件運算符,這樣就使我們少寫了很多代碼,增加了我們很多的工作效率
?. NULL條件運算符
Person per = null; string name = per?.Name;
如果我們這樣寫的話,同樣也可以判斷是否為空,代替了if的判斷和簡化了三元運算符的操作
例子:
我們嘗試一下,在一個集合中
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;