• C# ?? 运算符,不能忘记的知识点


      最近项目中有一个bug被测试(是黑盒测试)发现了,跟了老半天代码,才找到这个问题的所在,原来是一个计算表达式中用到了??运算符,才导致了这个错误,下面让我简单讲述一下。

      C# ?? 运算符 msdn上的定义如下:

    C#中的?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。 如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。

    这句话的意思很好理解,比如:

    int? x = null;
    int y = x ?? -1;

    那么y的值就是-1,这是很好理解的。

      下面看一下这段代码的结果:

    int? a = null;
    int b = 12 - a ?? 1;

     猜猜b的值是多少,或者很多人都会说是11,但是很遗憾的告诉你们不是,b的值是1(其实我想要的值也是11)。

    这时候可能有人会想是不是??运算符的优先级高于“-”,这样想就错了(开始我也是这么认为的)。

      那么再看下下面的这段代码的结果:

    int? a = null;
    a = 2;
    int b = 12 - a ?? 1;

    这段代码b的值又是多少呢,这时候b的值是10。

      你是不是有一点疑惑了,是不是不大理解了,其实我们可以这样理解:无论在单个变量或是一个运算表达式中(包含复杂的四则运算)如果有运算符??,如果??运算符左边的操作数为null,则变量(或整个表达式)的结果则是右操作数;否则是正常运算的结果。

      在开发中,这样的小疏忽就很可能会产生很大的bug,那么我们怎样避免这的问题呢?方法也是很简单的,就是在有??运算符的外面加上一个"()"这样就会得到我们想要的计算结果了。代码如下:

                int? a = null;
                int b =12 - (a ?? 1);
  • 相关阅读:
    计算机是如何启动的
    比特币
    区块链技术
    哈夫曼树与哈夫曼编码
    Prim Algoritm(最小生成树)
    机器学习概述总览
    线性查找算法(BFPRT)
    DFS(深度优先搜索)
    BFS(广度优先搜索)
    (Dijkstra)迪杰斯特拉算法-最短路径算法
  • 原文地址:https://www.cnblogs.com/junjieok/p/3766677.html
Copyright © 2020-2023  润新知