c# 运算符 ? ??

 static void Main(string[] args)
        {
            //空合并行运算??
            /*?? 提供了一种快捷方式,可以在处理可空类型和引用类型时表示null值的可能性,这个运算符放在
             两个操作数之间,第一个操作数必须是一个可空类型或者引用类型,第二个操作数必须与第一个操作数
             类型相同,或者可以隐式转换为第一个操作数的类型
             1、如果第一个操作数不是null,整个表达式就等于第一个操作数的值;
             2、如果第一个操作数是null, 整个表达式就等于第二个操作数的值
            */
            int? a = null;
            int b;
            b = a ?? 10;
            a = 3;
            Console.WriteLine(b); // 10
            b = a ?? 10;
            Console.WriteLine(b); //3

            //空值传播运算符 object?.method;
            /*
             * 生产环境中代码会检查验证变量空值条件,访问变量时需要检查判断是否为null,否则会抛出NullReferenceException, 但是有时很容易忘记这样的检查,可以利用空值传播的特性来简化代码
             */
            int? d = 2;
            Console.WriteLine(d?.ToString().GetType().Name); // String
            d = null;
            Console.WriteLine(d?.ToString().GetType().Name); // null
            
            //当空值传播类型访问int类型的属性时,不能将结果直接分配给int,因为结果可能为null,可以将结果分配为可空的int?
            //当然我们也可以结合空合并行运算符的特性??来实现

            Person p = new Person();
            int e = p?.Age ?? 666;
            Console.WriteLine(e); //123

            p = null;
            e = p?.Age ?? 666;
            Console.WriteLine(e); //666

            //当然也可以将这种特性用于数组的可空判断

            int[] arr = null;
            
            Console.WriteLine(arr?[0]); //null

            arr = new[] {1, 2, 3};

            Console.WriteLine(arr?[0]); //1
            Console.ReadKey();

 

posted @ 2018-11-28 17:42  我是外婆  阅读(1597)  评论(0编辑  收藏  举报