Null操作符

C#提供了两种操作符,它们可以更容易的处理null
Null合并操作符
符号为??
如果操作符不是null,那么把它给我;否则的话,给我一个默认值
如果左边的表达式非null,那么??右边的表达式就不会被计算

  1. static void Main()
  2. {
  3. string s1 = null;
  4. string s2 = s1 ?? "nothing";
  5. System.Console.WriteLine(s2); // print: nothing
  6. string s3 = "something";
  7. string s4 = s3 ?? "nothing"; // 如果左边不为null右边直接不会被计算
  8. System.Console.WriteLine(s4); // print: something
  9. }


Null条件操作符(Elvis)
C#6中出现的用法 ?.
允许你像.操作符那样调用方法或访问成员,除非当左边的操作符数是null的时候,那么整个表达式就是null,而不会抛出NullReferenceException
一旦遇到null,这个操作符就把剩余表达式给短路掉了

  1. static void Main()
  2. {
  3. System.Text.StringBuilder sb = null;
  4. string s = sb.ToString(); // 会抛出System.NullReferenceException
  5. string s1 = sb?.ToString();// 相当于下面这行代码
  6. string s2 = (sb == null ? null : sb.ToString());
  7. }

Null条件操作符

最终表达式必须可以接受null
可以和null合并操作符一起使用

  1. static void Main()
  2. {
  3. System.Text.StringBuilder sb = null;
  4. // ↓ 会报错 无法将null赋值给int类型
  5. int length = sb?.ToString().Length;
  6. // 如果是可空int类型就可以接受赋值
  7. int? length2 = sb?.ToString().Length;
  8. }

合并使用两种操作符的例子

  1. static void Main()
  2. {
  3. System.Text.StringBuilder sb = null;
  4. string s = sb?.ToString() ?? "nothing";
  5. System.Console.WriteLine(s); // print: nothing
  6. }