C#2.0增功能04 可以为 null 的类型
可以为 null 的类型是 System.Nullable<T> 结构的实例。 可以为 null 的类型可表示一个基础类型的所有值 T,还可以再表示一个 null 值。 基础类型 T 可以是任何不可为 null 的值类型。 T 不能是引用类型。
例如,可以将 null 或任何整数值(从 Int32.MinValue 到 Int32.MaxValue)赋给 Nullable<int>,并可将 truefalse 或 null 赋给Nullable<bool>。
需要表示基础类型的未定义的值时,请使用可以为 null 的类型。 布尔变量只能有两个值:true 和 false。 没有“未定义”的值。 在许多编程应用程序中,尤其是数据库交互中,变量值可能未定义或缺失。 例如,数据库中的字段可能包含值 true 或 false,但它也可能根本不包含任何值。 这种情况下要使用 Nullable<bool> 类型。
可以为 null 的类型具有以下特征:
可以为 null 的类型表示可以向其赋与
null值的值类型变量。 不能根据引用类型创建可以为 null 的类型 (引用类型已支持null值)。语法
T?是Nullable<T>的简写。 这两种形式是可互换的。向可以为 null 的类型赋值的方法与向基础值类型赋值的方法相同:
int? x = 10;或double? d = 4.108;。 还可赋予null值:int? x = null;。使用 Nullable<T>.HasValue 和 Nullable<T>.Value 只读属性可测试是否存在 null 值并检索值,如以下示例所示:
if (x.HasValue) y = x.Value;如果变量包含值,则 HasValue 属性返回
true;如果值为null,则返回false。如果 HasValue 返回
true,则 Value 属性返回值。 否则会引发 InvalidOperationException。
还可将
==和!=运算符用于可以为 null 的类型,如以下示例所示:if (x != null) y = x.Value;如果a和b均为 null,则a == b的计算结果为true。从 C# 7.0 开始,可以使用模式匹配来检查和获取可以为 null 的类型的值:
if (x is int valueOfX) y = valueOfX;。T?的默认值是一个实例,其 HasValue 属性返回false。使用 GetValueOrDefault() 方法可返回赋予的值,如果可以为 null 的类型的值为
null,它还可返回基础值类型的默认值。使用 GetValueOrDefault(T) 方法可返回赋予的值,如果可以为 null 的类型的值为
null,它还可返回提供的默认值。使用 null 合并运算符
??,基于可以为 null 的类型的值向基础类型赋值:int? x = null; int y = x ?? -1;。 在示例中,由于x为 null,所以y的结果值为-1。如果定义了(用户定义的)两种数据类型之间的转换,还可将同一转换用于这些数据类型的可为 null 的版本。
不得嵌套可以为 null 的类型。 不会编译下面的一行代码:
Nullable<Nullable<int>> n;
有关详细信息,请参阅使用可以为 null 的类型,以及如何:标识可以为 null 的类型主题。
请参阅
C#2.0增功能04 可以为 null 的类型的更多相关文章
- C#3.0新增功能04 扩展方法
连载目录 [已更新最新开发文章,点击查看详细] 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型 ...
- C#4.0新增功能04 嵌入的互操作类型
连载目录 [已更新最新开发文章,点击查看详细] 从 .NET Framework 4 开始,公共语言运行时支持将 COM 类型的类型信息直接嵌入到托管程序集中,而不要求托管程序集从互操作程序集中 ...
- Mautic-2.2.0 (Ubuntu 16.04)
平台: Ubuntu 类型: 虚拟机镜像 软件包: mautic-2.2.0 business intelligence commercial ecommerce mautic open-source ...
- C#7.0 新增功能
连载目录 [已更新最新开发文章,点击查看详细] C# 7.0 向 C# 语言添加了许多新功能 01 out 变量 支持 out 参数的现有语法已在此版本中得到改进. 现在可以在方法调用的参数列表 ...
- C#6.0 新增功能
连载目录 [已更新最新开发文章,点击查看详细] C# 6.0 版本包含许多可提高开发人员工作效率的功能. 这些功能的总体效果是让你编写的代码更简洁.更具可读性. 该语法不像许多常见做法那样繁琐. ...
- EF4.0和EF5.0增删改查的写法区别及执行Sql的方法
EF4.0和EF5.0增删改查的写法区别 public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T>(). ...
- VS2015预览版中的C#6.0 新功能(二)
VS2015预览版中的C#6.0 新功能(一) VS2015预览版中的C#6.0 新功能(三) 自动属性的增强 只读自动属性 以前自动属性必须同时提供setter和getter方法,因而只读属性只能通 ...
- VS2015预览版中的C#6.0 新功能(三)
VS2015预览版中的C#6.0 新功能(一) VS2015预览版中的C#6.0 新功能(二) Using static 使用using StaticClass,你可以访问StaticClass类里的 ...
- VS2015预览版中的C#6.0 新功能(一)
VS2015预览版中的C#6.0 新功能(二) VS2015预览版中的C#6.0 新功能(三) VS2015的预览版在11月12日发布了,下面让我们来看看C#都提供了哪些新的功能. 字符串添写(Str ...
随机推荐
- WCF研究-中篇
中篇 5.托管于宿主 6.消息模式 7.WCF行为-实例管理和并发控制 8.安全 5.托管于宿主 托管 宿主Host Ø承载WCF Service运行的环境 自承载方式 系统服务方式 IIS方式 WA ...
- PHP中关于时间、时区、本地时间、UTC时间、GMT时间、时间戳等知识的梳理
在PHP开发中,我们经常会在时间问题上被搞糊涂,比如我们希望显示一个北京时间,但是当我们使用date函数进行输出时,却发现少了8个小时.几乎所有的php猿类都必须对php中几个重要的时间转换等方法进行 ...
- 02、MySQL—数据库基本操作
数据库是数据存储的最外层(最大单元) 1.创建数据库 基本语法:create database 数据库名字 [库选项]; 范例:使用create database 创建数据库 库选项:数据库的相关属性 ...
- 【练习题】proj2 字符串压缩
输入一个字符串,输出简单的压缩 1)单字符串压缩 : 输入:ABBBCCD , 输出AB3C2D 2)多字符串压缩 输入:AABCABCD,输出A(ABC)2D 1)压缩单个字符 #include & ...
- vsphere网络
物理网络 物理机间建立的网络,VMware ESXi运行于物理机之上 虚拟网络 单台物理机上运行的虚拟机之间通信形成的逻辑网络. 一.网络概述 1. 物理以太网交换机 2.vSphere标准交换机 虚 ...
- centos 5.5版本中添加ext4格式
1.我在使用centos 5.5版本做练习的时候发现默认是不支持ext4文件格式. 在添加硬盘后,用fdisk -l 查看到信息如下: 分区完后,使用命令:mkfs -t ext4 /dev/sdb会 ...
- docker部署asp.net core
上一篇文章我们成功的在win10上边安装了docker,这篇文章,我们将在docker中部署asp.net core程序, 先来一张运行成功的hello world镇楼 现在开始,首先创建一个asp. ...
- 【数据结构】红黑树-Java实现
WIKI:https://en.wikipedia.org/wiki/Red%E2%80%93black_tree 转:红黑树(五)之 Java的实现 总结的比较精炼的: http://www.cnb ...
- 继承Comparable接口来实现排序
1.java代码里进行排序(若sql能排序,就不要用代码排序) 可以继承Comparable接口来实现,若是在类中,可以声明Comparator对象,来进行比较 List<Map> map ...
- 将GMap封装为Activex供QT使用(工具:VS2017,QT5.12) 更新部署到其它电脑
由于一开始定的开发平台在QT下,到后面要加入地图控件.qt里本身带有地图qmap(在qt的官方案例中可以找到,用qml做的),但只有固定的几个地图源,要做google或者bing地图,时间和人力不允许 ...