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;