C#中检查null的语法糖,非常实用

  • C#中检查null的语法糖,非常实用已关闭评论
  • 115 次浏览
  • A+
所属分类:.NET技术
摘要

c#处理null的几个语法糖,非常实用。(尤其是文末Dictionary那个案例,记得收藏)

c#处理null的几个语法糖,非常实用。(尤其是文末Dictionary那个案例,记得收藏)

??
如果左边是的null,那么返回右边的操作数,否则就返回左边的操作数,这个在给变量赋予默认值非常好用。

int? a = null; int b = a ?? -1; Console.WriteLine(b);  // output: -1

 

??=
当左边是null,那么就对左边的变量赋值成右边的

int? a = null; a ??= -1; Console.WriteLine(a);  // output: -1

 

?.
当左边是null,那么不执行后面的操作,直接返回空,否则就返回实际操作的值。

using System; public class C {     public static void Main() {         string i = null;         int? length = i?.Length;         Console.WriteLine(length ?? -1); //output: -1     } }

 

?[]
索引器操作,和上面的操作类似

using System; public class C {     public static void Main() {         string[] i = null;         string result = i?[1];         Console.WriteLine(result ?? "null"); // output:null     } }

注意,如果链式使用的过程中,只要前面运算中有一个是null,那么将直接返回null结果,不会继续计算。下面两个操作会有不同的结果。

using System; public class C {     public static void Main() {         string[] i = null;         Console.WriteLine(i?[1]?.Substring(0).Length); //不弹错误         Console.WriteLine((i?[1]?.Substring(0)).Length) // System.NullReferenceException: Object reference not set to an instance of an object.     } }

 

一些操作

//参数给予默认值 if(x == null) x = "str"; //替换 x ??= "str";   //条件判断 string x; if(i<3)      x = y; else  {       if(z != null) x = z;      else z = "notnull"; } //替换 var x = i < 3 ? y : z ?? "notnull"   //防止对象为null的时候,依然执行代码 if(obj != null)      obj.Act(); //替换 obj?.Act();  //Dictionary取值与赋值 string result; if(dict.ContainKey(key)) {     if(dict[key] == null) result = "有结果为null";     else result = dict[key]; } else      result = "无结果为null"; //替换 var result= dict.TryGetValue(key, out var value) ? value ?? "有结果为null" : "无结果为null";

 C#中检查null的语法糖,非常实用