C# 的可空合并运算符(??)到底是怎样的宝宝?

Posted Matcha_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 的可空合并运算符(??)到底是怎样的宝宝?相关的知识,希望对你有一定的参考价值。

前言废语

也怪自己小白和不勤奋,没有系统的学习C#相关的东西,工作一年多还是初级小菜,深感不安,来到园子才发现好多钻研技术的人,也渐渐发现自己开始喜欢上了这个编程的世界。今日偶遇??操作符,发现我只看见过三目运算符(?:),现在发现还有一个这个"扫地僧"一样存在的运算符,于是到官网上看了一下,借助工具和自己的理解,来完成这篇??二目运算符的解释。

定义

??被称为【可空合并】运算符,是一个二目运算符,操作参数两枚,其完成的功能为对左参数判断之后进行赋值。

       返回结果:如果左操作数不为空,则返回右操作数;如果左操作书为空,则返回右操作数。

       格式:object1 ?? object2 

       

1 //伪代码示例
2 obejct NullCoalescingFunc( obejct object1,obejct obejct2)
3 {
4      if(object1==null)
5            return object1;
6       else
7            return object2;
8 }

备注

可空类型(Nullable type)的变量既可以表示原类型取值范围内的值,也可以给其赋值为NULL(关于C#的可空类型是什么类型,此文暂且不论,读者自己百度先)。所以假如左操作数是一个值为NULL的可空类型变量时,就可以使用??运算符来返回适当的值(右操作数的值)。假如开发者尝试将一个可空类型变量的值赋给一个不可空类型的变量时,就会引起编译错误不通过。亦或者在前后上下文没有声明可空类型的变量时,开发者使用强制转换,会引发 InvalidOperationException 异常。

测试代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


class NullCoalesce
{
    static int? GetNullableInt()
    {
        return null;
    }

    static string GetStringValue()
    {
        return null;
    }

    static void Main()
    {
        int? x = null;
        int y = x ?? -1;
        Console.WriteLine(string.Format("x={0},y={1}",x,y));
       
        int i = GetNullableInt() ?? default(int);
        Console.WriteLine(string.Format("i={0} ", i));

        string s = GetStringValue();
        Console.WriteLine(s ?? "Unspecified");

        Console.ReadKey();
    }
}

输出

技术分享

以上是关于C# 的可空合并运算符(??)到底是怎样的宝宝?的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 8 的可空引用类型

? 的可空类型问题:条件运算符

C# 8中的可空引用类型

关于C#中的“?”

C# 中的可空双 NaN 比较

添加新的可空列后,是不是需要更新某个表上的每个 C# SQL 查询?