System.Nullable<T>结构.

19.1 C# 对可空值类型的支持

  • C# 允许用问号表示法来声明可空值类型,如:
    Int32? x = 5;Int32? y = null;
  • System.Nullable<T>应用操作符解析规则:

    • 一元操作符(+, ++, -, --, !, ~) 操作数是 null ,结果就是 null.
    • 二元操作符(+, -, *, /, %, &, |, ^, <<, >>) 两个操作数任何一个是 null ,结果就是 null . 但有一个例外,它发生在将 &| 操作符应用于 Boolean? 操作数的时候.这种情况和 SQL 的三值逻辑一样.都不为 null ,正常计算;都为 null ,结果为 null ;其一为 null 时,见下面示例:
      null & true = null ; null | true = true ; null & false = false ; null | false = null ;
    • 相等操作符(==, !=) 两个操作数都是 null,两者相等; 一个操作数是 null, 两者不相等;两个操作数都不是 null,就比较值来判断是否相等.
    • 关系操作符(<, >, <=, >=) 两个操作数任何一个是 null,结果就是 false ,两个操作数都不是 null,就比较值.
  • 操作可空实例会生成大量代码,且速度慢于非可空类型.
  • 定义自己的值类型来重载操作符,编译器能正确识别它并调用你重载的操作符(方法).

19.2 C# 的空接合操作符

  • C# 提供了一个"空接合操作符",即 ?? 操作符,它要取两个操作数.假如左边的操作数不为 null,就返回这个操作数的值,否则,就返回右边的操作数的值.
  • 既可用于引用类型,也能用于可空值类型.
        int? b = null;//下面等价于:// x =(b.HasValue) ? b.Value : 123int x = b ?? 123;Console.WriteLine(x);   // "123"//下面这行等价于:// string temp = GetFilename();// filename = (temp != null) ? temp : "Untitled";string filename = GetFilename() ?? "Untitled";

19.3 CLR 对可空值类型的特殊支持

  • 装箱: 当 CLR 对 Nullable<T> 实例进行装箱时,会检查它是否为 null .如果是,CLR 不装箱任何东西,直接返回 null . 如果不为 null , CLR 从可空实例中取出值并进行装箱.
  • 拆箱:
        //创建已装箱的 Int32object o = 5;//把它拆箱为一个 Nullable<int>和一个intint? a = (int?)o;   // a = 5int b = (int)o;     // a = 5//创建初始化为null的一个引用o = null;a = (int?)o;    // a = nullb = (int)o;     // NullReferenceException
  • Nullable<T> 对象上调用 GetType,会返回 T 的类型
  • Nullable<Int32> 类型的变量 n 可以转型为接口类型 IComparable<Int32>
        int? n = 5;int result = ((IComparable)n).CompareTo(5);Console.WriteLine(result);

转载于:https://www.cnblogs.com/harry-wang/p/7410559.html

NET CLR via c# 第4版笔记 第19章 可空值类型相关推荐

  1. 计算机网络第七版笔记--第三章

    计算机网络第七版学习笔记 第三章数据链路层 3.1使用点对点信道的数据链路层 3.1.1数据链路和帧 1.链路(link)就是从一个结点到相邻结点的一段物理线路(有线或无线),而中间没有任何其他的交换 ...

  2. 《微波技术与天线》 刘学观 西安电子科技大学 第二版 课后答案 1-9章

    百度网盘链接:https://pan.baidu.com/s/1eOaekW_PWEZZw9G-5Udleg提取码:p5vx 网上找了基本都只能找到1-6章的答案,找了好几个小时才找到比较完整的1-9 ...

  3. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-003-@Conditional根据条件生成bean及处理profile...

    一.用@Conditional根据条件决定是否要注入bean 1. package com.habuma.restfun;public class MagicBean {} 2. package co ...

  4. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-008-SpEL介绍

    一. 1.SpEL expressions are framed with  #{ ... } 2.SpEl的作用 Sp EL has a lot of tricks up its sleeves, ...

  5. SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-008-带参数的ADVICE

    一. 假设有情形如:cd里有很多轨,当播放音乐时,要统计每个音轨的播放次数,这些统计操作不应放在播放方法里,因为统计不是播放音乐的主要职责,这种情况适合应用AOP. 二. 1. package sou ...

  6. 【hadoop权威指南第四版】第七章MR的类型与格式【笔记+代码】

    7.1MR类型 7.2 输入格式 7.2.1输入分片与记录 InputFormat类的层次结构 每一个map操作只处理一个输入分片,并且一个一个地处理每条记录,也就是一个键值对. 在数据库中,一个输入 ...

  7. SPRING IN ACTION 第4版笔记-第四章Aspect-oriented Spring-001-什么是AOP

    一. Aspect就是把会在应用中的不同地方重复出现的非业务功能的模块化,比如日志.事务.安全.缓存 In software development, functions that span mult ...

  8. Python Crash Course读书笔记 - 第19章:USER ACCOUNTS

    允许用户输入数据 目前用户数据Topic和Entry都是通过管理站点输入的,我们希望用户可以新增和编辑数据. 允许用户输入和提交数据的Web页面称为form,在Django中可使用ModelForm. ...

  9. AUTOMATE THE BORING STUFF WITH PYTHON读书笔记 - 第19章:MANIPULATING IMAGES

    本章介绍Pillow模块,可处理图形文件.安装如下: # pillow安装依赖于JPEG源代码 $ sudo yum install libjpeg-turbo-devel $ pip3 instal ...

最新文章

  1. react 从零开始搭建开发环境
  2. 达人篇:2.1)零缺陷管理法;
  3. linux 补丁脚本,Linux上打patch补丁包脚本全解
  4. Shell字符串处理之 ${}
  5. POJ - 2318 TOYS(叉积+二分)
  6. saltstack mysql_saltstack学习五:return及入库_MySQL
  7. 还要什么ETL?它是搭建数据仓库的必备,许多人都不知道!
  8. oracle批量更新数据从另一表_【案例】Oracle t-sql 更新大批量数据 更新两张大数据表案例...
  9. 4G模块使用记录SIMCOM7070
  10. ZOC7 for Mac破解版激活方法附注册码
  11. Spring的Bean生命周期
  12. java.exe占用8081端口
  13. 运行您自己的电子邮件服务器:自定义Roundcube
  14. 【Codeforces Round #476 (Div. 2) [Thanks, Telegram!] B】Battleship
  15. php大转盘程序,jQuery幸运大转盘_jQuery+PHP抽奖程序(下)
  16. 半年内连发6篇CNS!又一顶级学者全职回国,加盟浙大!
  17. 一文搞懂“网络协议”
  18. 山世光:AI产业需要赋能平台
  19. 【散文】 岁月留痕遇好友
  20. 王者荣耀那么火 但你知道创始人背后的故事吗

热门文章

  1. 征战蓝桥 —— 2015年第六届 —— C/C++A组第4题——格子中输出
  2. 【MFC】定制浮动工具栏
  3. 【Tools】WireShark3.2安装教程详解
  4. 如何把睡袋转给别人_微信收到的语音如何转给别人?试试这2个方法,没准能帮到你...
  5. java 工作 日期转换代码,判断是否是当天,然后日期转换
  6. 手把手教你在windows10下进行openFoam调试
  7. iOS 13 绕过锁屏密码查看通讯录、照片、短信
  8. SQL Server 2000 没开1433端口的问题
  9. px4官网调参指南 多旋翼无人机PID调参指南
  10. float与double类型区别比较