Null操作符
C#提供了两种操作符,它们可以更容易的处理null
Null合并操作符
符号为??
如果操作符不是null,那么把它给我;否则的话,给我一个默认值
如果左边的表达式非null,那么??右边的表达式就不会被计算
static void Main(){string s1 = null;string s2 = s1 ?? "nothing";System.Console.WriteLine(s2); // print: nothingstring s3 = "something";string s4 = s3 ?? "nothing"; // 如果左边不为null右边直接不会被计算System.Console.WriteLine(s4); // print: something}
Null条件操作符(Elvis)
C#6中出现的用法 ?.
允许你像.操作符那样调用方法或访问成员,除非当左边的操作符数是null的时候,那么整个表达式就是null,而不会抛出NullReferenceException
一旦遇到null,这个操作符就把剩余表达式给短路掉了
static void Main(){System.Text.StringBuilder sb = null;string s = sb.ToString(); // 会抛出System.NullReferenceExceptionstring s1 = sb?.ToString();// 相当于下面这行代码string s2 = (sb == null ? null : sb.ToString());}
Null条件操作符
最终表达式必须可以接受null
可以和null合并操作符一起使用
static void Main(){System.Text.StringBuilder sb = null;// ↓ 会报错 无法将null赋值给int类型int length = sb?.ToString().Length;// 如果是可空int类型就可以接受赋值int? length2 = sb?.ToString().Length;}
合并使用两种操作符的例子
static void Main(){System.Text.StringBuilder sb = null;string s = sb?.ToString() ?? "nothing";System.Console.WriteLine(s); // print: nothing}
