• C#中检查null的语法糖


    有关null的一些操作

    说起这个,就顺便说说c#处理null的另外几个语法糖吧。

    ??

    如果左边是的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# 11提供了一个新的??,话说我个人还是挺喜欢这个特性的,不管以什么形式出现吧,期待以后再见。

    C#中为了处理null给我们准备了许多的语法糖,只能说非常简便了。有很多人会说这个可读性不好,或者觉得这是“茴字的几种写法”似的歪门邪道,我只能说,传统的语法也不是说取消了,语言有发展,只要还是比较审慎的,我觉得还是一件好事。

  • 相关阅读:
    [C++]怎么将.h和.cpp文件分别放在不同的目录
    [C++]VAssistX文件头添加注释功能设置
    教程-Delphi调用百度地图API(XE8+WIN7)
    WebBrowser的各种使用方法(未完待续)(XE8+WIN7)
    Android教程-夜神模拟器连接IDE更新让Delphi发现你的手机或夜神模拟器
    首尔甜城常用电话
    Android问题-DelphiXE5开发Andriod连接Webservice乱码问题
    点乘的使用
    [转]脏读,不可重复读,幻读的理解
    Unity3D刚体不同力的测试(ForceMode,AddForce,RelativeAddForce)
  • 原文地址:https://www.cnblogs.com/zwbsoft/p/16281958.html
Copyright © 2020-2023  润新知