经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
C#中检查null的语法糖,非常实用
来源:cnblogs  作者:王者天涯  时间:2023/1/28 8:45:25  对本文有异议

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

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

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

 

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

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

 

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

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

 

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

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

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

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

 

一些操作

  1. //参数给予默认值
  2. if(x == null) x = "str";
  3. //替换
  4. x ??= "str";
  5. //条件判断
  6. string x;
  7. if(i<3)
  8. x = y;
  9. else
  10. {
  11. if(z != null) x = z;
  12. else z = "notnull";
  13. }
  14. //替换
  15. var x = i < 3 ? y : z ?? "notnull"
  16.  
  17.  
  18. //防止对象为null的时候,依然执行代码
  19. if(obj != null)
  20. obj.Act();
  21. //替换
  22. obj?.Act();
  23. //Dictionary取值与赋值
  24. string result;
  25. if(dict.ContainKey(key))
  26. {
  27. if(dict[key] == null) result = "有结果为null";
  28. else result = dict[key];
  29. }
  30. else
  31. result = "无结果为null";
  32. //替换
  33. var result= dict.TryGetValue(key, out var value) ? value ?? "有结果为null" : "无结果为null";

 

原文链接:https://www.cnblogs.com/dotnet-college/p/17067371.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号