??含义:如果 ?? 运算符的左操作数非 null,该运算符将返回左操作数,否则返回右操作数。

如果不赋予初值,C#的变量是不允许直接使用的。
但有的时候,让值的类型为空是非常有用的,
比如三态bool,其中一个状态便是未给定值。

泛型使用System.NullAble<T>提供了类型值为空的一种方式。
System.NullAble<T> nullAbleInt;
因为太常用,C#特意给了一个语法快捷
int? nullAbleInt;
简单的例子:
int? nVal1 = new int?();
int? nVal2 = null;
int? nVal3 = 3;
Console.WriteLine(nVal1); // 输出null
Console.WriteLine(nVal2); // 输出null
Console.WriteLine(nVal3); // 输出3

原则:null与任何数数学运算结果为null,null bool 操作任何值结果为 null。

为了减少可空类型的代码量,遇到null的时候
C#提供了??操作符来获取如果为空的默认值。
static void Main(string[] args)
{
int? nVal1 = null;
int? nVal2 = 5;
// nVal1为空,相乘后还是null,输出0作为默认值
Console.WriteLine(2 * nVal1 ?? 0);
// nVal2非空,取计算值输出,输出10
Console.WriteLine(2 * nVal2 ?? 0);
}

再举一个实例:

/// <summary>
        /// 获取上次配置
        /// </summary>
        public static UploadConfig Config
        {
            get
            {
                //如果 ?? 运算符的左操作数非 null,该运算符将返回左操作数,否则返回右操作数。
                //本例中,即如果_config不为null的话,直接返回,如果为null的话,进行实例化,再返回
                return _config ?? (_config = new UploadConfig()
                {
                    RootUploadPath = "/temp/excel/",
                    Storage = StorageType.SameDirectory,
                    AllowExt = ".xls",
                    MaxSize = 1024000
                });
            }
        }

转载于:https://www.cnblogs.com/yxyht/archive/2012/12/14/2817688.html

C#中 ?? 的用法相关推荐

  1. c++中static_cast用法与uchar/char的区别

    1.c++中static_cast用法 static_cast是指显性类型强制转换,如: int a = static_cast<int>(120.34); 结果为a= 120. 和C语言 ...

  2. 简单介绍Python中异常处理用法

    这篇文章主要给大家分享的是 Python中异常处理用法,为了保证程序的健壮性与容错性,即在遇到错误时候程序不会崩溃,我们需要对异常进行处理,下面来看看文章对此的用法,需要的朋友可以参考一下 为了保证程 ...

  3. 关于OpenCV中常见函数用法总结

    关于OpenCV中常见函数用法总结 一 一般Mat的赋值操作 二 求Mat中的最大值以及最小值 三 randn()函数给图像添加高斯噪声 四 mean()函数的用法 五 系统计时器 六 矩阵之间的四则 ...

  4. java中import用法

    java中import用法 单类型导入(single-type-import),例如import java.io.File; 按需类型导入(type-import-on-demand),例如 impo ...

  5. 一个线程中lock用法的经典实例

    1 /* 2 该实例是一个线程中lock用法的经典实例,使得到的balance不会为负数 3 同时初始化十个线程,启动十个,但由于加锁,能够启动调用WithDraw方法的可能只能是其中几个 4 作者: ...

  6. 几个比较好用的Windows API在C#中的用法。

    几个比较好用的Windows API在C#中的用法. #region Windows Api 定义 ///   /// 模拟鼠标事件   ///   /// 鼠标事件的Enum   /// X座标   ...

  7. python管道界面_python中管道用法入门实例

    本文实例讲述了python中管道用法.分享给大家供大家参考.具体如下: #!coding=utf-8 import multiprocessing def consumer(pipe): output ...

  8. MVC中HtmlHelper用法大全

    MVC中HtmlHelper用法大全参考 解析MVC中HtmlHelper控件7个大类中各个控件的主要使用方法(1) 2012-02-27 16:25 HtmlHelper类在命令System.Web ...

  9. mysql raiserror_RAISERROR在SQL Server数据库中的用法

    raiserror  是由单词 raise error 组成 raise  增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ser ...

  10. 查询前几条记录SQL在不同数据库中的用法

    13,(1)查询前几条记录SQL在不同数据库中的用法; 1. ORACLE SELECT * FROM TABLE1 WHERE ROWNUM<=N 2. INFORMIX SELECT FIR ...

最新文章

  1. 【Java】面试高频考题---topK问题详解(堆heap求解)
  2. SpringMVC 多视图配置
  3. Android-ffmpeg编译so文件
  4. 十年编程经验输给新晋AI工程师,6个月我们带你绝地反击
  5. boost::serialization模块实现测试 shared_ptr 序列化的测试程序
  6. vs2010 引入cout,cin ,endl报错,不能识别
  7. 使用临时表解决union和order by不能同时使用的问题
  8. python输出字典的前十项,从字典列表中获取前5个值?
  9. 使用sever2008做DHCP中继代理
  10. Swagger怎么下载文件
  11. 【北京邮电大学计算机考研资料汇总大全】
  12. java 新浪短链接_新浪t.cn短链接如何生成?网址缩短api接口分享
  13. 文件内容读取相关操作
  14. 使用Python对股票数据进行数据分析(一)-计算日线行情、5日均线、10日均线行情并显示
  15. 74HC595控制8位数码管 计时程序
  16. c语言expand函数,编撰expand(s1,s2)
  17. 高性能的PHP日志系统 SeasLog
  18. python可以开发桌面应用软件吗_用Python可以开发出桌面软件吗?
  19. Android lights system
  20. 电子计算机 人们把它叫做( ),强大的信息处理工具电子计算机(7页)-原创力文档...

热门文章

  1. springmvc连接mysql_挺详细的spring+springmvc+mybatis配置整合|含源代码
  2. python分段线性插值_Python实现分段线性插值
  3. 纯新手DSP编程--5.16--目标和主机设置
  4. 编译原理教程_9 运行时存储组织
  5. JWT教程_2 SpringSecurity与JWT整合
  6. qt新建html5,QT Creator无法创建纯C++项目或HTML5项目(QT Creator直接关闭)
  7. mysql 下载教程_MySQL下载安装详情图文教程
  8. 栈的出入js实现_js 实现栈的结构
  9. 计算机三级网络技术知识点cn,计算机等级三级网络技术考试详解
  10. Word2Vec入门