.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,一经查实,立即删除!

相关文章

zabbix JMX监控 tomcat

第一步:需要安装jdk1.# tar xvf jdk-7u21-linux-x64.tar.gz -C /usr/localource /etc/bashrc2.# ln -s /usr/local/jdk1.7.0_21 /usr/local/jdk3.# echo JAVA_HOME/usr/local/jdk >> /etc/bashrc4.# echo PATH$PATH:${JAVA_HOME}/bin/ >> /etc/bashrc5.…

Android之Base64

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

mysql 1054 42s22_MySQL ERROR 1054(42S22)

修改用户的密码,网上搜到的命令为如下执行后报错  ERROR 1054(42S22) Unknown column password in ‘field list’错误的原因是 5.7版本下的mysql数据库下已经没有password这个字段了,password字段改成了authentication_string所以请使用一下命令>my…

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

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页,很多没有看懂,并且没有总结起来,这次一定要把设计原则和设计模式总结清楚。 设计模式的分类 设计模式分为三大类:创建型模式,共五种:工厂方法模式、…

Java IO的RandomAccessFile的使用(转)

现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下“Lucene是一款非常优秀的全文检索库”。可能大多数朋友会觉得这个需求很easy,说实话,确实easy,然后XXX君开始实现了,直接使用Java…

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

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

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

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

C# 如何判断某个 tcp 端口是否被占用?

咨询区 Ali:在 C# 中使用 TcpClient 或者其他通用的方式建立的 Socket,请问我如何判断这个端口是否被占用?比如下面的代码:TcpClient c; //I want to check here if port is free. c new TcpClient(ip, port);回答区 jro&#xf…

C#正则表达式编程(四)转致周公

正则表达式提供了功能强大、灵活而又高效的方法来处理文本。正则表达式的全面模式匹配表示法使您可以快速分析大量文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;或将提取的字符串添加到集合以生成报告。对于处理字符串(例如…

Quartz 的SB问题 GetNextValidTimeAfter 输出和输出 时区 不同步,好傻的方法?

测试代码如下DateTime kk new DateTime(2012, 6, 4, 15, 0, 0);Quartz.CronExpression cron new Quartz.CronExpression("0 14 15 ? * *");var dt cron.GetNextValidTimeAfter(kk);好傻好伤。dt的时候是 {2012/6/5 7:14:00} 跑出了一个7点来了。正确的期待值应该…

Android之switch控件的用法

在做一个蓝牙开关时候,用到了switch,记一下用法,其实跟Button是几乎一样的. 布局中: <Switch android:id="@+id/open" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textOff="蓝牙关闭中&q…

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

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

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

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

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

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

在CISCO ASA 防火墙上配置Web ×××

目前市场上产品很多&#xff0c;而且技术各异&#xff0c;就比如传统的 IPSec 来讲&#xff0c; SSL 能让公司实现更多远程用户在不同地点接入&#xff0c;实现更多网络资源访问&#xff0c;且对客户端设备要求低&#xff0c;因而降低了配置和运行支撑成本。很多企业用户采纳 …

学Dapr Actors 看这篇就够了

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