C#可空类型及其衍生运算符
这节讲一下C#可空类型(Nullable)
我们知道,值类型在使用前必须设置值,而引用类型则可以是null,但在某些情况下,为值类型设置为空是必要的(如处理数据库数据的时候),微软因此推出了可空类型 System.Nullable<T> 这是一个泛型类,其中,T就代表一个具体的值类型。
在声明和使用中,以下两种情况是不允许的:
以下情况则可以(了解VS的同学会知道,类型颜色变灰说明此处可以简化,这就涉及到它的一个衍生运算符,我们后边讲):
可空类型,可以像引用类型一样,判断是否为空,而且它还有一对属性,HasValue/Value,从字面不难理解,一个是判断其是否有值,一个是取值。
注意,如果没有值,强行访问Value属性,会引发System.InvalidOperationException异常。
可空类型很有用,为此微软新添了一批语法,声明可空类型,可以使用一下语法:
T?和System.Nullable<T>等价,因此用System.Nullable<T>声明对象的时候,编译器会灰化声明代码,因为有简化的T?语法。
?? 运算符
为了进一步简化处理可空类型的代码量,微软引入 ?? 运算符 ,这个运算符叫空结合运算符(null coalescing operator) ,这是一个二元运算符,目的是为了数据为空的情况下,提供默认值
a为空,就返回1,用法很简单,a不为空,返回a的值,这种用法,避免使用if等复杂的代码块,提高了程序可读性。
?.运算符
为了避免可空类型或者引用类型在空引用时引发的NullReferenceException异常,微软又引入了 ?. 空条件运算符,请看代码(举个稍微不恰当的例子):
有一 Person 类,我们可能获取到空的数据对象(此处直接赋值为空),后续直接调用其方法就会引发异常,
下面改用空条件运算符,程序正常运行
我们可以配合 ?? 运算符简化代码
注意,?? 运算符两边的类型必须一致
从错误提示中,我们也可以得知,?? 不能应用于不同类型
这是我的公众号二维码,获取最新文章,请关注我的公众号

C#可空类型及其衍生运算符的更多相关文章
- 以php中的比较运算符操作整型,浮点型,字符串型,布尔型和空类型
字符,数字,特殊符号的比较依赖ASC II表,本表原先有127个,后来又扩充了一些,里面包含了奇奇奇怪的符号. ASC II表 https://baike.baidu.com/item/ASCII/3 ...
- 以php中的算数运算符操作(整型,浮点型,字符串型,布尔型,空类型)数据
// 环境 // // php版本 // PHP 7.0.33-0+deb9u1 (cli) (built: Dec 7 2018 11:36:49) ( NTS ) // Copyright (c) ...
- 泛型 System.Collections.Generic及泛型继承、运算符、结构、接口、方法、委托、事件、可空类型等
一.定义泛型类 void Main() { //实例化泛型类时,才指定具体的类型 MyGenericClass<); Console.WriteLine(MyGeneri.InnerT1Obje ...
- 以php中的自增自自减运算符操作(整型,浮点型,字符串型,布尔型,空类型)数据
// 环境 // // php版本 // PHP 7.0.33-0+deb9u1 (cli) (built: Dec 7 2018 11:36:49) ( NTS ) // Copyright (c) ...
- 四、可空类型Nullable<T>到底是什么鬼
值类型为什么不可以为空 首先我们都知道引用类型默认值都是null,而值类型的默认值都有非null. 为什么引用类型可以为空?因为引用类型变量都是保存一个对象的地址引用(就像一个url对应一个页面),而 ...
- 【C#】可空类型(Nullable)
C# 可空类型(Nullable) C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值. 例如,Nullable& ...
- C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)
前言 之前对几个没什么理解,只是简单的用过可空类型,也是知道怎么用,至于为什么,还真不太清楚,通过整理本文章学到了很多知识,也许对于以后的各种代码优化都有好处. 本文的重点就是:值类型直接存储其值,引 ...
- 可空类型(Nullable)
C# 单问号 ? 与 双问号 ?? ? : 单问号用于对 int,double,bool 等无法直接赋值为 null 的数据类型进行 null 的赋值,意思是这个数据类型是 NullAble 类型的. ...
- [No0000EA]C# 可空类型(Nullable)
C# 可空类型(Nullable) C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值. 例如,Nullable& ...
随机推荐
- 在 .NET Core 中构建 REST API
翻译自 Camilo Reyes 2020年8月26日的文章 <Build a REST API in .NET Core> [1] REST API 可以使用简单的动词(如 POST.P ...
- Android学习之 AlertDialog
•AlertDialog简介 AlertDialog 可以在当前界面弹出一个对话框: 这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力: 因此, AlertDialog 一般用于提示 ...
- [矩阵乘法]裴波拉契数列III
[ 矩 阵 乘 法 ] 裴 波 拉 契 数 列 I I I [矩阵乘法]裴波拉契数列III [矩阵乘法]裴波拉契数列III Description 求数列f[n]=f[n-1]+f[n-2]+1的第N ...
- 设计Web页面(2)
1.前面我们新建了一个空白的ASP.NET网页,那么接下来这章我们就讲一下设计Web页面 2.布局页面有两种方法,一种是通过Table表格来布局页面窗体,另一种是通过CSS+DIV来布局窗体,其中作为 ...
- hadoop 简单安装部署
hadoop第一课:虚拟机搭建和安装hadoop及启动 hadoop第二课:hdfs集群集中管理和hadoop文件操作 hadoop第三课:java开发hdfs hadoop第四课:Yarn和Map/ ...
- wap视频广告遇到的问题
最近在做一个wap端的视频广告,耗了很多心力在上面,仍旧做不好.没想到wap浏览器对video标签这么不友好.广告需要在原编辑视频播完后插入并自动播放. ios浏览器点击播放按钮后喜欢自动全屏播放,希 ...
- Java(246-264)【List、Set】
1.数据结构_栈 Stack先进后出 2.数据结构_队列 Queue先进先出 3.数据结构_数组 Array查询快.增删慢 需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素根 据索引 ...
- CentOS更换aliyun镜像站
目录 1. 官方地址 2. 社区文档 3. 镜像更换 3.1 配置方法: 3.1.1. 备份原配置文件 3.1.2. 下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/ ...
- mariadb_2 单表的增删改查
命令关键字: 创建表 create 删除表 drop 修改表的内容 update 修改表的结构 alter 删除表中内容 delete 增加表中内容 insert 查询表中内容 select ...
- Day13_67_interrupt() 方法
interrupt() 方法 中断线程 * interrupt()方法的简单理解 - interrupt() 方法只是改变线程的阻塞状态而已,让一个正在阻塞状态的线程,恢复执行.但是它不会中断一个正在 ...