.NET 6新特性试用 | 可空引用类型

前言

在查看《隐式using指令》功能时,我们在csproj中发现这样一个属性:

d8e1cd934036e33fc1fb1cfa4ec0d640.png

那么,Nullable到底是干嘛的?

可为空上下文

严格来说,这不是新特性,而是C# 8.0引入的特性之一。该特性用于指示引用类型是否接受null值:

abe6dda14bc5c9e527a417cccdaa0b56.png

只是在.NET 6以前,该特性默认是禁用的,你可以在VS2019中手工启用:

65bf4450d66325e2d1ba834e207e5454.png

当启用该特性时,对于不接受null值的引用类型有可能收到null时,将出现警告消息。

Demo

假设有下列方法,接受一个字符串类型(引用类型)的参数:

static void test(string str)
{...
}

如果在运行时对其传入null值,则会引发System.NullReferenceException异常:

71b55e354976a56ec134eddbbdca4145.png

而现在,在代码编辑器中,你将看到黄色波浪线,告诉你使用了不允许的空引用类型:

f6db0dab5534bc96f5c2ba1470f0207c.png

如果变量可以允许有一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“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之Base64

Base64介绍 Base64是一种基于64个可打印字符来表示二进制数据的表示方法,从本质上看Base64编码就是将三字节转四字节。如将字符串“Man”用Base64编码。 如果数据的长度不是3的整数倍

这是不是帮女朋友拍照时的你?哈哈哈哈

1 就跟我房东说:现在打工人压力真大一样▼2 原来,连打工人都不配了吗?(素材来源网络,侵删)▼3 原来这才是家大叶大▼4 给女朋友拍照时的你!(via.刘一杭三三 )▼5 当法…

linux slub分配器浅析

在《linux内存管理浅析》中提到内核管理自己使用的内存时,使用了SLAB对象池。SLAB确实是比较复杂,所以一直以来都没有深入看一看。不过现在,linux内核中,SLAB已经被它的简化版--SLUB所代替。最近抽时间看了一下SLUB的代码&#xf…

openfire 插件开发例子

2019独角兽企业重金招聘Python工程师标准>>> 好久都没有写东西了。今天总结一下之前开发的一些openfire插件。 这次的插件需要提供一个HTTP的接口。通过HTTP来对openfire做一些操作。 插件的目录结构:项目名称“exampleplugin" src/main/javaorg/ji…

WPF实现一个彩虹按钮

WPF开发者QQ群: 340500857 | 微信群 -> 进入公众号主页 加入组织玩玩彩虹文字,这次用 LinearGradientBrush 并且制作成按钮,虽然没技术含量反而有些实用,这就是返璞归真吗。首先来回忆下 LinearGradientBrush 的用法。LinearG…

设计模式的分类和六大设计原则

学习设计模式我是大学研究《java与模式这本书》1024页,很多没有看懂,并且没有总结起来,这次一定要把设计原则和设计模式总结清楚。 设计模式的分类 设计模式分为三大类:创建型模式,共五种:工厂方法模式、…

nvidia控制面板点了没反应win7_为什么没有nvidia控制面板_win7没有nvidia控制面板怎么找回-系统城...

2016-10-31 16:15:46  浏览量:30668如果电脑显卡出现问题会导致屏幕画面不清楚,这时候win7系统自带nvidia控制面板就派上用场了。它能够对显卡进行设置,提升显卡功能,但有用户说win7怎么没有nvidia控制面板?找很久也…

公交车座椅上有个洞,竟是为了…很多人都不知道

全世界只有3.14 % 的人关注了爆炸吧知识坐公交车的时候你有没有发现公交车的座椅上通常来说中间都会有个洞洞的大小基本上刚好够一个手指头穿过那么这个洞到底有什么用呢?小编特意问了一圈同事们的回答真的脑洞大开有的说洞口刚好可以穿过手指是不是乘客无聊的时候可…

pythonresponse对象的属性_Scrapy中response属性以及内容提取

PythonPython开发Python语言Scrapy中response属性以及内容提取一.属性url :HTTP响应的url地址,str类型status:HTTP响应的状态码, int类型headers :HTTP响应的头部, 类字典类型, 可以调用get或者getlist方法对其进行访问body:HTTP响…

【转】学习apicloud和IOS之间的模块化使用

最近公司有使用APICloud发开的需求,需要我这边提供一些模块包得封装。因为没有也是刚接触APICloud,所以也就在看官方文档 。下面讲一讲我再使用过程中得一点点东西。 首先,下载官方SDK,下载最新版本的模块开发SDK,找到里面的Modul…

豪横!学术圈“造假之王”,200余篇论文有183篇论文被撤稿

全世界只有3.14 % 的人关注了爆炸吧知识导读:学术造假已经不再是什么新鲜话题,历史上的学术骗子也是数不胜数。其中骗子之王更是达到前无古人的地步,发表论文数212篇,因涉嫌造假而遭到撤稿的就达到了183篇之多。然而打假的过程并不…

学Dapr Actors 看这篇就够了

介绍Actor模式将Actor描述为最低级别的“计算单元”。换句话说,您在一个独立的单元(称为actor)中编写代码,该单元接收消息并一次处理一个消息,没有任何并发或线程。再换句话说,根据ActorId划分独立计算单元…

git之Pushing to the remote branch is not fast-forward错误解决

今天推送代码的时候报错了这个Pushing to the remote branch is not fast-forward,so the push has to be forced.The commits in the remote branch will be lost 错误,然后就出现这个效果,下面是图片。 问题(Non-fast-forward)的…

CSS Id 和 Class

2019独角兽企业重金招聘Python工程师标准>>> id 和 class 选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置"id" 和 "class"选择器。 id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。 HTML元素以id属…

这4部有生之年必看的“教材级”纪录片,免费领取!

全世界只有3.14 % 的人关注了爆炸吧知识纪录片是以真实生活为创作素材,以真人真事为表现对象,并对其进行艺术的加工与展现的,以展现真实为本质,并用真实引发人们思考的电影或电视艺术形式。好的纪录片就像打开了一扇新世界的大门&…

Dapr 集成 APISIX 做API网关

在这篇文章中,我将展示如何创建一个 APISIX控制器,该控制器在 Kubernetes 集群中公开启用 Dapr 的应用程序。本质上,APISIX控制器将配置相同的标准 Dapr annotations以注入daprd sidecar。通过公开这个 sidecar,它将允许外部应用程…

判断一个字符串是否包含另一个字符串(用java但是不能用index()这个函数)

目录: 一.方法介绍 二.图示意 三.源代码 一.方法介绍 判断一个字符串str1是否包含另一个字符串str2: 1.取str2的第一个字符一次和str1的字符依次比较,知道找到相等的字符为止或者找完整个str1的length. 2.当找到相等的字符后,在str2长度内str2与str1依次进行比较 二…

跳槽9招让你“空降”任何企业都能成功

2019独角兽企业重金招聘Python工程师标准>>> 作为一名职业经理人,没有谁没跳过槽,撇开在跳槽时对所“空降”的企业所需要的行业知识知根知底而“得心应手”,从而“稳定”外,其他人可能或多或少都有过因“不适应”新单位…

这个年纪,喜欢你的肉体还会送你包的,原来是......

1 iPhone 12一出王守义成最大赢家(素材来源网络,侵删)▼2 想搭免费车的喵(dy:大兔几)▼3 拼纹身的有吗?纹在我身,刀在你身▼4 那你泡啥?▼5 快把知识君p上去&#xff…

C# WPF MVVM模式Caliburn.Micro框架下事件发布与订阅

01—前言处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Caliburn提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事件进行通讯,且彼…