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 的类型主题。
请参阅
成在管理,败在经验;嬴在选择,输在不学! 贵在坚持!
个人作品
BIMFace.SDK.NET
开源地址:https://gitee.com/NAlps/BIMFace.SDK
系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html
技术栈
1、Visual Studio、.NET Core/.NET、MVC、Web API、RESTful API、gRPC、SignalR、Java、Python
2、jQuery、Vue.js、Bootstrap、ElementUI
3、数据库:分库分表、读写分离、SQLServer、MySQL、PostgreSQL、Redis、MongoDB、ElasticSearch、达梦DM
4、架构:DDD、ABP、SpringBoot、jFinal
5、环境:跨平台、Windows、Linux、Nginx
6、移动App:Android、IOS、HarmonyOS、微信小程序、钉钉、uni-app、MAUI
分布式、高并发、云原生、微服务、Docker、CI/CD、DevOps、K8S;Dapr、RabbitMQ、Kafka、RPC、Elasticsearch。
欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。
出处:www.cnblogs.com/SavionZhang
作者:张传宁 技术顾问、培训讲师、微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。
专注于企业级通用开发平台、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。
多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。
熟悉中小企业软件开发过程:可行调研、需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业实现互联网转型升级全流程解决方案。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如有问题,可以通过邮件905442693@qq.com联系。共同交流、互相学习。
如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!