架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7781|回复: 2

[资料] C# 8.0 可为空引用类型

[复制链接]
发表于 2022-3-26 16:40:21 | 显示全部楼层 |阅读模式
在 C# 8.0 之前,所有引用类型都可为 null。 可为 null 引用类型指 C# 8.0 中引入的一组功能,可用于最大程度地降低代码导致运行时引发的可能性。 可为 null 引用类型包括三项功能,可帮助避免这些异常,包括将引用类型显式标记为可为 null 的功能:

  • 经过优化的静态流分析,用于在取消引用变量之前确定其是否为 null。
  • 属性,用于注释 API 以便流分析确定 null 状态。
  • 变量注释,可供开发人员用于显式声明变量的预期 null 状态。


对现有项目默认禁用 Null 状态分析和变量注释,这意味着所有引用类型仍为可为 null。 从 .NET 6 开始,默认情况下会为新项目启用这些功能。

文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/nullable-references

可以为 null 的引用类型的作用是将应用程序在运行时引发 System.NullReferenceException 的机率降到最低

我使用 .NET 6 开发的一个项目,新建属性的一个 Name 属性,会提示如下警告:

在退出构造函数时,不可为 null 的 属性“Name”必须包含非 null 值。请考虑将 属性 声明为可以为 null。
QQ截图20220326160043.jpg

虽然是警告,但是非常的烦人!如何解决这个警告呢?赋值默认值为空字符串,代码如下:

也就是当该属性未手动赋值的时候,该属性的默认值为空字符串。

当使用一个局部变量,类型为 string? 的时候,也可能会生成警告,如下图:

微信截图_20220326163323.jpg

解决方案,在使用前判断该变量是否为 null,如果为 null 则不执行下面的代码,或者你认为该变量永远不可能为 null,可以使用 ArgumentNullException.ThrowIfNull(assemblyFullName); 也可以消除警告!也就是说,该变量如果为 null 的话,运行过程中直接抛出异常!

总结:C# 8.0 引入该特性,我自己感觉是为了提高开发者的严谨性,避免犯一些低级错误吧。

更多可为空警告的方法解决方案,请参考:https://docs.microsoft.com/zh-cn/dotnet/csharp/nullable-warnings





上一篇:查询当前项目 Git 的远程地址
下一篇:ASP.NET Core(十二)前端 JS、CSS 捆绑和压缩
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-3-26 20:57:32 | 显示全部楼层
学习学习
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-3-28 08:23:47 | 显示全部楼层
来学习一下
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-26 05:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表