随手翻阅C#高级编程时,看到可空类型和运算符这一节,又发现了自己的一个C#知识盲点。可空类型:
可空类型只能用于值类型,不能用于引用类型,引用类型本身支持null值。
如果直接把null赋值给int类型,会出现一个错误"无法将 NULL 转换成'int',因为它是一种值类型"。
赋值时应该使用 int? a = null;
可空类型与一元或二元运算符一起使用是,如果一个操作数或两个操作数都是null,其结果为null。
int?a=null;
int?b=a*5;//b = null
int?c=a+5;//c = null

比较可空类型时,只要有一个为null,结果为null。
int?a=null;
int?b=null;

a>b;//false
a==b;//false

空接合运算符(??):
如果第一个操作数不是null,则整个表达式就等于第一个操作数的值,如果第一个操作数是null,则整个表达式就等于第二个操作数的值。

int?a=null;
intd=3;

a=b??3;//a = 3
a=3??b;//a = 3

可空类型特性(MSDN): ·可空类型表示可被赋值为 null值的值类型变量。无法创建基于引用类型的可空类型。(引用类型已支持 null 值。)。·语法 T? 是 System.Nullable 的简写,此处的 T 为值类型。这两种形式可以互换。·为可空类型赋值与为一般值类型赋值的方法相同,如 int? x = 10; 或 double? d = 4.108;。·如果基础类型的值为 null,请使用 System.Nullable.GetValueOrDefault 方法返回该基础类型所赋的值或默认值,例如 intj = x.GetValueOrDefault();·请使用 HasValue 和 Value 只读属性测试是否为空和检索值,例如 if(x.HasValue) j = x.Value; 如果此变量包含值,则 HasValue 属性返回 True;或者,如果此变量的值为空,则返回 False。如果已赋值,则 Value 属性返回该值,否则将引发 System.InvalidOperationException。可空类型变量的默认值将 HasValue 设置为 false。未定义 Value。·使用 ?? 运算符分配默认值,当前值为空的可空类型被赋值给非空类型时将应用该默认值,如 int? x = null; inty = x ?? -1;。·不允许使用嵌套的可空类型。将不编译下面一行:Nullable> n;随手翻阅C#高级编程时,看到可空类型和运算符这一节,又发现了自己的一个C#知识盲点。可空类型:
可空类型只能用于值类型,不能用于引用类型,引用类型本身支持null值。
如果直接把null赋值给int类型,会出现一个错误"无法将 NULL 转换成'int',因为它是一种值类型"。
赋值时应该使用 int? a = null;
可空类型与一元或二元运算符一起使用是,如果一个操作数或两个操作数都是null,其结果为null。
int? a =null;
int? b = a *5; //b = null
int? c = a +5; //c = null

比较可空类型时,只要有一个为null,结果为null。
int? a =null;
int? b = null;

a > b; //false
a == b; //false

空接合运算符(??):
如果第一个操作数不是null,则整个表达式就等于第一个操作数的值,如果第一个操作数是null,则整个表达式就等于第二个操作数的值。

int? a =null;
int d=3;

a = b ??3; //a = 3
a =3?? b; //a = 3

可空类型特性(MSDN):

  • ·可空类型表示可被赋值为 null 值的值类型变量。无法创建基于引用类型的可空类型。(引用类型已支持 null 值。)。
  • ·语法 T? 是 System.Nullable 的简写,此处的 T 为值类型。这两种形式可以互换。
  • ·为可空类型赋值与为一般值类型赋值的方法相同,如 int? x = 10; 或 double? d = 4.108;。
  • ·如果基础类型的值为 null,请使用 System.Nullable.GetValueOrDefault 方法返回该基础类型所赋的值或默认值,例如 int j = x.GetValueOrDefault();
  • ·请使用 HasValue 和 Value 只读属性测试是否为空和检索值,例如 if(x.HasValue) j = x.Value;
    • 如果此变量包含值,则 HasValue 属性返回 True;或者,如果此变量的值为空,则返回 False。
    • 如果已赋值,则 Value 属性返回该值,否则将引发 System.InvalidOperationException。
    • 可空类型变量的默认值将 HasValue 设置为 false。未定义 Value。
  • ·使用 ?? 运算符分配默认值,当前值为空的可空类型被赋值给非空类型时将应用该默认值,如 int? x = null; int y = x ?? -1;。
  • ·不允许使用嵌套的可空类型。将不编译下面一行:Nullable> n;

C# 可空类型和空接合运算符(??)相关推荐

  1. 【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)

    文章目录 I . Kotlin 变量总结 II . Kotlin 非空变量 III . 非空变量不能赋空 IV . lateinit 关键字 V . lateinit 初始化判定 VI . Kotli ...

  2. Kotlin——初级篇(六):空类型、空安全、非空断言、类型转换等特性总结

    在我们熟知的Java中,定义一个变量可以默认不赋值,因为Java的系统会给我们默认赋一个默认值,并且Java可定义一个赋值为null的变量,这样在使用这个变量的时候都会去显示判断该变量是否为null. ...

  3. python空类型-python 空类型

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 在python中,数据采用了对象的形式(无论是python内置对象还是使 ...

  4. [C#基础知识系列]专题十:全面解析可空类型

    引言: C# 2.0 中还引入了可空类型,可空类型也是值类型,只是可空类型是包括null的值类型的,下面就介绍下C#2.0中对可空类型的支持具体有哪些内容(最近一直都在思考如何来分享这篇文章的,因为刚 ...

  5. 《Kotlin项目实战开发》 第3章 类型系统与可空类型

    2019独角兽企业重金招聘Python工程师标准>>> 第3章 类型系统与可空类型 跟Java.C和C ++ 一样, Kotlin也是"静态类型编程语言". 通常 ...

  6. [C#基础知识系列]专题十:全面解析可空类型[转]

    原文链接 主要内容: 1:空合并操作符(?? 操作符) ??操作符也就是"空合并操作符",它代表的意思是两个操作数,如果左边的数不为null时,就返回左边的数,如果左边的数为nul ...

  7. c# 空接合(??)运算符的运用

    相信很多人都看到??运算符,但是不一定每个人都知道它是用来做什么的,之前我也看到过很多次,但是因为一直没有去用过,所以也没有了解他的作用,今天又看到了,所以查了的MSDN,原来??运算符叫做空接合运算 ...

  8. 了解下C# 可空类型(Nullable)

    C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值. C# 单问号 ? 与 双问号 ?? ? 单问号用于对 int ...

  9. C#拾遗系列(9):继承、接口、扩展方法、分部类、类操作、Ref and Out、可空类型...

    本文内容: 继承 Equal示例 结构和类 属性 Ref and Out 类操作 扩展方法 接口 可空类型 分部类 1. 继承 using System; using System.Collectio ...

最新文章

  1. Android 不同View ID相同
  2. .Net解析html文档类库HtmlAgilityPack完整使用说明
  3. 网络资产管理系统_RFID固定资产管理系统_企业资产管理方案
  4. 树的遍历 | 翻转二叉树
  5. Centos7下安装netstat
  6. windows环境:dos 通过ftp连接到vsftpd 显示乱码解决方法
  7. [bzoj1008][HNOI2008]越狱-题解[简单组合数学]
  8. Android7.1+查看audio policy使用.conf/.xml(二十七)
  9. 最小高度100%页脚保持在底部的布局方法
  10. 哪些好的绘图软件和绘图工具?
  11. Arduino + AD9833 波形发生器
  12. 老男孩爬虫实战密训课第一季,2018.6,初识爬虫训练-实战2-自动登陆抽屉网
  13. java-net-php-python-java西藏文库计算机毕业设计程序
  14. Win7如何显示/隐藏Administrator账号
  15. 浪潮信息助力医院智慧医疗建设走得既稳又快
  16. 唯众本科Web前端专业解决方案
  17. 带变压器和不带变压器的RJ45
  18. 服务器的1U ,2U分别是什么意思?
  19. 2018-09-03 KK日记,记一次JVM内存使用过多的诊断
  20. 2018 Mac下pycharm 安装Django及创建app

热门文章

  1. Linux shell脚本的字符串截取
  2. iOS视图控制器之间delegate传值教程
  3. maven项目 Java compiler level does not match the version of the installed Java project facet
  4. sqlserver 遇到以零作除数错误的处理 不报错的解决方法
  5. 一款JS+CSS实现的无缝平滑图片滚动代码
  6. Docker 安装 MongoDB
  7. frp + nginx 配置多人共用的http 内网穿透服务
  8. Linux上开启TUN
  9. Docker上部署FTP服务器(基于stilliard/pure-ftpd)
  10. 观察者模式,从公众号群发说起