C#中 ?? 的用法
??含义:如果 ?? 运算符的左操作数非 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#中 ?? 的用法相关推荐
- c++中static_cast用法与uchar/char的区别
1.c++中static_cast用法 static_cast是指显性类型强制转换,如: int a = static_cast<int>(120.34); 结果为a= 120. 和C语言 ...
- 简单介绍Python中异常处理用法
这篇文章主要给大家分享的是 Python中异常处理用法,为了保证程序的健壮性与容错性,即在遇到错误时候程序不会崩溃,我们需要对异常进行处理,下面来看看文章对此的用法,需要的朋友可以参考一下 为了保证程 ...
- 关于OpenCV中常见函数用法总结
关于OpenCV中常见函数用法总结 一 一般Mat的赋值操作 二 求Mat中的最大值以及最小值 三 randn()函数给图像添加高斯噪声 四 mean()函数的用法 五 系统计时器 六 矩阵之间的四则 ...
- java中import用法
java中import用法 单类型导入(single-type-import),例如import java.io.File; 按需类型导入(type-import-on-demand),例如 impo ...
- 一个线程中lock用法的经典实例
1 /* 2 该实例是一个线程中lock用法的经典实例,使得到的balance不会为负数 3 同时初始化十个线程,启动十个,但由于加锁,能够启动调用WithDraw方法的可能只能是其中几个 4 作者: ...
- 几个比较好用的Windows API在C#中的用法。
几个比较好用的Windows API在C#中的用法. #region Windows Api 定义 /// /// 模拟鼠标事件 /// /// 鼠标事件的Enum /// X座标 ...
- python管道界面_python中管道用法入门实例
本文实例讲述了python中管道用法.分享给大家供大家参考.具体如下: #!coding=utf-8 import multiprocessing def consumer(pipe): output ...
- MVC中HtmlHelper用法大全
MVC中HtmlHelper用法大全参考 解析MVC中HtmlHelper控件7个大类中各个控件的主要使用方法(1) 2012-02-27 16:25 HtmlHelper类在命令System.Web ...
- mysql raiserror_RAISERROR在SQL Server数据库中的用法
raiserror 是由单词 raise error 组成 raise 增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ser ...
- 查询前几条记录SQL在不同数据库中的用法
13,(1)查询前几条记录SQL在不同数据库中的用法; 1. ORACLE SELECT * FROM TABLE1 WHERE ROWNUM<=N 2. INFORMIX SELECT FIR ...
最新文章
- 【Java】面试高频考题---topK问题详解(堆heap求解)
- SpringMVC 多视图配置
- Android-ffmpeg编译so文件
- 十年编程经验输给新晋AI工程师,6个月我们带你绝地反击
- boost::serialization模块实现测试 shared_ptr 序列化的测试程序
- vs2010 引入cout,cin ,endl报错,不能识别
- 使用临时表解决union和order by不能同时使用的问题
- python输出字典的前十项,从字典列表中获取前5个值?
- 使用sever2008做DHCP中继代理
- Swagger怎么下载文件
- 【北京邮电大学计算机考研资料汇总大全】
- java 新浪短链接_新浪t.cn短链接如何生成?网址缩短api接口分享
- 文件内容读取相关操作
- 使用Python对股票数据进行数据分析(一)-计算日线行情、5日均线、10日均线行情并显示
- 74HC595控制8位数码管 计时程序
- c语言expand函数,编撰expand(s1,s2)
- 高性能的PHP日志系统 SeasLog
- python可以开发桌面应用软件吗_用Python可以开发出桌面软件吗?
- Android lights system
- 电子计算机 人们把它叫做( ),强大的信息处理工具电子计算机(7页)-原创力文档...
热门文章
- springmvc连接mysql_挺详细的spring+springmvc+mybatis配置整合|含源代码
- python分段线性插值_Python实现分段线性插值
- 纯新手DSP编程--5.16--目标和主机设置
- 编译原理教程_9 运行时存储组织
- JWT教程_2 SpringSecurity与JWT整合
- qt新建html5,QT Creator无法创建纯C++项目或HTML5项目(QT Creator直接关闭)
- mysql 下载教程_MySQL下载安装详情图文教程
- 栈的出入js实现_js 实现栈的结构
- 计算机三级网络技术知识点cn,计算机等级三级网络技术考试详解
- Word2Vec入门