.NET 6新特性试用 | 可空引用类型
前言
在查看《隐式using指令》功能时,我们在csproj中发现这样一个属性:
那么,Nullable
到底是干嘛的?
可为空上下文
严格来说,这不是新特性,而是C# 8.0引入的特性之一。该特性用于指示引用类型是否接受null值:
只是在.NET 6以前,该特性默认是禁用的,你可以在VS2019中手工启用:
当启用该特性时,对于不接受null值的引用类型有可能收到null时,将出现警告消息。
Demo
假设有下列方法,接受一个字符串类型(引用类型)的参数:
static void test(string str)
{...
}
如果在运行时对其传入null值,则会引发System.NullReferenceException
异常:
而现在,在代码编辑器中,你将看到黄色波浪线,告诉你使用了不允许的空引用类型:
如果变量可以允许有一null值,那么只需添加一个"?":
static void test(string? str)
{Console.WriteLine(str?.Length);
}
此外,你还可使用指令在源代码的任何位置设置,明确当前文件是否使用可为空上下文:
#nullable enable
:将可为空注释上下文和可为空警告上下文设置为“已启用”。#nullable disable
:将可为空注释上下文和可为空警告上下文设置为“已禁用”。#nullable restore
:将可为空注释上下文和可为空警告上下文还原到项目设置。#nullable disable warnings
:将可为空警告上下文设置为“已禁用”。#nullable enable warnings
:将可为空警告上下文设置为“已启用”。#nullable restore warnings
:将可为空警告上下文还原到项目设置。#nullable disable annotations
:将可为空注释上下文设置为“禁用”。#nullable enable annotations
:将可为空注释上下文设置为“启用”。#nullable restore annotations
:将注释警告上下文还原到项目设置。
结论
默认开启Nullable
,好处就是在开发的时候,会不断的验证引用类型实例是否可为null,避免了引发NullReferenceException异常的很多错误。
如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“
.NET 6新特性试用 | 可空引用类型相关推荐
- .NET 6新特性试用 | 总结:我最喜欢的5个特性
前言 不知不觉,<.NET 6新特性试用>系列文章已经写了20多篇,而今天终于要告一段落了. 如果你还没有看过,详细文章列表在这里: .NET 6新特性试用系列 在这么多特性中,我最喜欢如 ...
- .NET 6新特性试用 | ArgumentNullException卫语句
前言 在前面的文章中(<可空引用类型>),我们介绍过编译器会帮我们检查空引用,但是仅仅是警告.最好的方式还是在运行时用卫语句进行检查: private void Test(WeatherF ...
- 5.0 新特性试用体验之 Clustered Index
作者:hzc989 原文来源: https://tidb.net/blog/69dd056c [是否原创]是 [首发渠道]TiDB 社区 [目录] 一.引言 二.基础前情回顾 三.era withou ...
- JDK1.8新特性 Optional判空详解,简化判空操作
一.简介 从 Java 8 引入的一个很有趣的特性是 Optional 类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) -- 每个 Java ...
- .NET 6新特性试用 | LINQ功能改进
前言 .NET6为LINQ添加了多个新API,在本文中,我们将始终使用User类逐一演示这些添加到LINQ中的内容: public class User {public string Name { g ...
- .NET 6新特性试用 | PeriodicTimer
前言 在.NET中,已经存在了5个Timer类: System.Threading.Timer System.Timers.Timer System.Web.UI.Timer System.Windo ...
- .NET 6新特性试用 | 可写JSON DOM API
前言 我们常用JSON的方式,是将类对象序列化/反序列化: var user = new User { Name = "My IO" }; var json = JsonSeria ...
- .NET 6新特性试用 | SDK工作负载
前言 为了应对.NET SDK能够支持的程序集项目(例如iOS.Android.WASM)的不断增长,从.NET 6开始,允许用户仅安装必要的SDK(例如ASP.NET Core),而不是一次性安装& ...
- .NET 6新特性试用 | 文件范围的命名空间
前言 在前面的<隐式using指令>文章中,我们介绍了global using,可以减少我们代码文件中的"噪音",使代码更简洁. 今天,我们介绍.NET 6中另一个简化 ...
最新文章
- pytorch JIT浅解析
- 《我想进大厂》之JVM夺命连环10问
- oem客户工程流程图_OEM产品流程图
- 仅通过崩溃地址找出源代码的出错行
- C++中this指针的使用方法.
- 计算机应用基础专科,2019年自考《计算机应用基础》专科模拟试题及答案
- edittext 属性
- 安全登录代码 php,PHP登录怎么写安全
- 2018农行--软开
- 牛客刷题<17>用3-8译码器实现全减器
- linux串口编程(termios结构体说明)
- C语言实验—— 数值统计
- 0x0000011b共享打印机无法连接解决方法
- 探秘Google新搜索引擎算法
- realsense相机色彩图与深度图对齐
- Unity让物体跟随鼠标移动
- 09-01 面向对象编程
- 特斯拉员工年薪曝光:软件工程师 109 万元
- HUAWEI篇 NGFW与AR网关建立GRE over IPSec隧道
- Java 生成随机长度字母组合