这节讲一下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 类,我们可能获取到空的数据对象(此处直接赋值为空),后续直接调用其方法就会引发异常,

​下面改用空条件运算符,程序正常运行

​我们可以配合 ?? 运算符简化代码

​注意,?? 运算符两边的类型必须一致

​从错误提示中,我们也可以得知,?? 不能应用于不同类型​

  

  这是我的公众号二维码,获取最新文章,请关注我的公众号

最新文章

  1. 微信聊天测试脚本 wx_sample.php
  2. hibernate 一对多映射关系
  3. Django admin的一些有用定制
  4. 用Windows Server 2003搭建企业内部邮件服务器
  5. CSS基础3——使用CSS格式化元素内容的字体
  6. android应用的优化建议(转载)
  7. 我的Java起源
  8. Linux 终端 Bash 常用快捷键介绍及经验
  9. PHP 必知的 16 个编程法则
  10. hiho一下 第207周
  11. 关于TCP和MQTT之间的转换(转载)
  12. Canvas 和 SVG 的不同
  13. java利用Tesseract 识别身份证号码
  14. ESLint + lint-staged 禁用老项目中的es6
  15. Python的Numpy库简述
  16. Java学习笔记8(面向对象3:接口)
  17. Codeforces Round #520 (Div. 2)
  18. 改善C++ 程序的150个建议学习之建议7:时刻提防内存溢出
  19. 7、Docker Container
  20. 分布式缓冲之memcache

热门文章

  1. 一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解
  2. C# 调用HTTP接口两种方式
  3. Trie、并查集、堆、Hash表学习过程以及遇到的问题
  4. SpringBoot-13 Dubbo实战
  5. DevOps教程:DevOps 面试题
  6. redis的线程模型
  7. sql注入之超详细sqlmap使用攻略
  8. CIE标准色度系统(上)
  9. Ambassador-05-自动重试
  10. ArrayList、CopyOnWriteArrayList源码解析(JDK1.8)