当前位置: 首页 > 编程日记 > 正文

微软在C# 8中引入预览版可空引用类型

微软已经为开发者提供了预览版的可空引用类型(Nullable Reference Type),想尝鲜的开发者可以尝试这个新特性,并提供反馈。

\\

预览版可空引用类型是Visual Studio 2017 15.5 Preview 4+的Roslyn扩展,现在支持.NET框架,很快也将支持.NET Core。该特性在C# 8中是默认启用的。微软为此提供了安装指南。

\\

在C# 8中引入新的可空引用类型是为了解决十亿美元问题(Billion Dollar Mistake)。1965年,英国计算机科学家Tony Hoare在开发ALGOL时称其为空引用(Null Reference)。指针最主要的问题是,有时候它们会为空,而这并非我们所期望的。在将空指针作为一种特性引入之后,反而变成产生bug的主要源头。

\\

早在2011年,用户就在Visual Studio User Voice里要求“在C#中引入不可空引用类型”,一年之后,经过投票,该需求排到了第15位,现在已经跑到了第一的位置上。这个特性之所以在很长一段时间内都无法实现,是因为C#的空引用到处可见。C#首席设计师Mads Torgersen解释说:

\\
\

问题是空引用太有用了。在C#里,引用类型默认就是空值。还能用其他什么值来作为默认值吗?在你知道该给一个变量赋什么值之前,拿什么作为它的默认值?一个新创建的引用数组又该使用怎样的默认值?

\\

有时候,空值本身也是有意义的。比如,有时候需要让一个字段不包含任何值,或者将空值作为参数进行传递也是没有问题的。但这些情况并不常见。这里还有另一个问题:像C#这样的语言并没有提供一种方式可以用于说明某处的空值是有意义的还是无意义的。

\
\\

为了避免在C#中引入不可空引用类型,微软将引用类型规定为默认不可空,并提供了一些机制用于处理可空类型。他们认为,大部分情况下引用类型都是非空或被间接引用的。Torgersen写道:

\\
\\t
  1. 我们相信,大部分情况下引用类型都不应该为空。可空引用类型是很罕见的(尽管很难说具体多罕见),所以需要单独对它们进行注解。\\t\t
  2. C#已经提供了可空的值类型(value type)。\\t\t
  3. 不应该让你自己或其他人在空值这个问题上有太多负担,除非你确定需要它们。空值应该是我们需要显式去指定的。\\t
\\

可空引用类型通过问号来定义,如下所示:

\\
\class Person {\  public string FirstName; // Not null\  public string? MiddleName; // May be null\  public string LastName; // Not null\}\
\\

微软希望开发者试用这个新特性,并提供反馈。

\\

更多的信息可参考 C# Futures: Nullable Reference Types、C# 8.0 Previewed、A Proposal for Non-Nullable Types in C#。

\\

查看英文原文:Microsoft Previews Nullable Reference Types in C# 8

相关文章:

制作ui设计作品集要注意哪些

UI设计作品集的作用是非常大的,不要小看,它可以用来展示自身的UI设计实力,参加完UI设计培训后找工作当然也是非常重要的一个环节,下面小编就为大家详细的介绍一下制作ui设计作品集要注意哪些问题? UI设计培训分享:制作…

[转] 理解RESTful架构

FROM:http://www.ruanyifeng.com/blog/2011/09/restful.html 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高…

【直播】陈安东,但扬:CNN模型搭建、训练以及LSTM模型思路详解

CNN模型搭建、训练以及LSTM模型思路详解 目前 Datawhale第24期组队学习 正在如火如荼的进行中。为了大家更好的学习“零基础入门语音识别(食物声音识别)”的课程设计者 陈安东和但扬杰,将为大家带来一场直播分享 —— CNN模型搭建、训练以及L…

参加Java培训需要注意哪些

想要学好java技术,靠自学是非常困难的,通过java培训机构进行系统的学习是最好的,那么参加Java培训需要注意哪些呢?来看看下面的详细介绍。 参加Java培训需要注意哪些?大概整理了下面几点。 1、要有与时俱进且完整沉浸的课程体系。 IT培训的…

JDBC操作MySQL Lob字段记实

JDBC操作MySQL Lob字段记实虽然Java的持久化框架多如牛毛,但都离不开JDBC技术,JDBC在某些时候是其他框架难以取代的。也是java操作数据库最根本的技术。上文写了JDBC操作DB2 Lob字段bug问题,为此,我还特意写了MySQL平台下的Lob字段…

placeholder

打开一个那边发过来的页面,里面全是placeholder。没见过,一时气愤全部ko,用传统的方法都能搞定的东西,为啥要标新立异! 后来发现如果想在input password里显示个把汉字,还真是不容易,总不能让我…

【直播】李祖贤:集成学习答疑直播之五 -- 常用集成思路

集成学习答疑直播之五 – 常用集成思路 集成学习 是首个横跨3个周期的长期组队学习,在 第24期组队学习 中进行到“第二期-模型集成思路”阶段。组队学习期间,课程设计者每周针对学习任务的重难点和学员的学习情况进行集中直播答疑,目前已经进…

参加Python培训班能找到工作吗?

参加Python培训班能找到工作吗?很多人都比较关心这个问题,尤其是正在参加Python培训的同学,想要了解这个问题,我们必须从Python就业市场、Python就业班优劣以及个人学习效果三个大的方面进行分析。来看看下面的详细介绍。 参加Python培训班能…

HTTP协议Etag详解

HTTP协议规格说明定义ETag为“被请求变量的实体值”。另一种说法是,ETag是一个可以与Web资源关联的记号(token)。典型的Web资源可以一个Web页,但也可能是JSON或XML文档。服务器单独负责判断记号是什么及其含义,并在HTT…

【第13周复盘】小朋友们也开始卷了

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

原生ajax+php上传图片的简单实现

前端 <input type"file" onclick"updown" accept"image/png,image/gif">//accept限制上传的类型<script> function upload1(obj){ var files obj.files ; var formData new FormData();$.ajax({url: download.php,type: "POS…

参加软件测试培训前景怎么样

软件测试在近几年的发展前景还是非常不错的&#xff0c;很多人都开始参加软件测试培训班学习技术&#xff0c;要想具体了解参加软件测试培训前景怎么样?来看看下面的详细介绍就知道了。 参加软件测试培训前景怎么样?各大招聘平台上&#xff0c;都能看到测试的影子&#xff0c…

如果你喜欢一个程序员小伙

程序员向来是善于幽默自嘲的群体&#xff0c;但从某种程度上影响了咱程序员在广大女同胞心中的印象啊&#xff5e;&#xff5e;于是写下此篇&#xff08;有从别处看到的3句加进来的&#xff09;&#xff0c; 就算是为咱程序员做个广告&#xff5e;&#xff5e;要是觉得有点过的…

遇到大容量磁盘你该怎么办?

GPT 磁盘分区&#xff1a;首先&#xff0c;你得有一块 GPT 分区的硬盘。小于 2 TB 的磁盘也可以转为 MBR 磁盘&#xff0c;但是大于 2 TB 的磁盘则需要使用 GPT 分区&#xff0c;否则大于 2 TB 的部分将被你封印。 挂载硬盘后&#xff0c;打开系统并以 root 身份登陆。这里博主…

如何解决Python3写入CSV出现‘gbk‘ codec can‘t encode的错误

今天&#xff0c;我在 Windows 上用 Python3 爬取知乎上有关中医的问答&#xff0c;但是在把爬取的内容写进CSV文件的时候&#xff0c;出现了以下异常。 UnicodeEncodeError: gbk codec cant encode character \u2630 in position 3969: illegal multibyte sequence经过上网查…

ui设计怎样做出有效果的视觉层级?

作为一名UI设计师&#xff0c;大家应该清楚的了解到每一款产品都有不同的风格和设计&#xff0c;但是每一款UI设计元素都是有通风之处的&#xff0c;如何能够做出有效的视觉层级&#xff0c;对用户的体验有着十分积极的影响。本期UI设计培训教程就为大家详细的介绍一下ui设计怎…

Java RandomAccessFile的使用

Java的RandomAccessFile提供对文件的读写功能&#xff0c;与普通的输入输出流不一样的是RamdomAccessFile可以任意的访问文件的任何地方。这就是“Random”的意义所在。 RandomAccessFile的对象包含一个记录指针&#xff0c;用于标识当前流的读写位置&#xff0c;这个位置可以向…

【组队学习】【24期】集成学习(中)

集成学习&#xff08;中&#xff09; 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearning 基本信息 贡献人员&#xff1a;李祖贤、薛传雨、赵可、杨毅远、陈琰钰、李嘉骐学习周期&#xff1a;12天学习形式&a…

Android发布项目到外部仓库

为什么80%的码农都做不了架构师&#xff1f;>>> 关于android发布仓库到外部项目的文章&#xff0c;目前大概为分两类&#xff1a; 一种是发布到bintray、jcenter上&#xff0c;一种是将项目上传到github&#xff0c;然后利用jitpack自动打包&#xff0c;下面简单说…

Java零基础学习难吗

java编程是入行互联网的小伙伴们大多数的选择&#xff0c;那么对于零基础的小伙伴来说Java零基础学习难吗?如果你是初学者&#xff0c;你可以很好的理解java编程语言。并不困难。如果你的学习能力比较高&#xff0c;那么你对Java的理解会更快。而如果你恰巧已经掌握了c或c语言…

玩转“网上邻居”之网络配置(二)

接上篇二、混合系统网络目前实际应用中单一系统的对等网络已不是主流&#xff0c;主要是由于这种网络性能较低&#xff0c;缺乏很好看安全及网络管理能力。目前在各企事业单位中普遍应用的还是基于多系统的域结构混合网络。但因目前主流应用的系统比较多&#xff0c;所以各种网…

UVa 10180 - Rope Crisis in Ropeland!

题目链接&#xff1a;http://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&category41&pageshow_problem&problem1121 题意&#xff1a;给出两点坐标&#xff0c;用一条最短的线&#xff08;曲线或者直线&#xff09;连接起来&#xff0c;坐…

【组队学习】【24期】河北邀请赛(二手车价格预测)

河北邀请赛&#xff08;二手车价格预测&#xff09; 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-data-mining/tree/master/SecondHandCarPriceForecast 数据挖掘实践&#xff08;二手车价格预测&#xff09;的内容来自 Datawhale与天池联合发起…

什么样的人合适学习Python?

什么样的人合适学习Python?近几年&#xff0c;关注Python技术的小伙伴越来越多&#xff0c;很多人都想知道Python培训好不好学?难不难学?哪些人适合学?来看看下面的详细介绍。 Python培训分享&#xff1a;什么样的人合适学习Python?想学好python&#xff0c;关键还是看三点…

Table doesn't have a primary key

从数据库取出来的数据&#xff0c;一般会放在一个DataTable中。但是&#xff0c;Insus.NET想实现一个小功能&#xff0c;就是在这个DataTable能快速找到某一行记录&#xff0c;来显示于asp.net页面上。这时我们可以使用DataTable的Find()成員函式來檢查資料是否已存在。但当Ins…

【组队学习】【24期】数据挖掘实践(智慧海洋)

数据挖掘实践&#xff08;智慧海洋&#xff09; 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-data-mining/tree/master/wisdomOcean 基本信息 贡献人员&#xff1a;李运佳、李万业、赵信达、张晋、刘羽中、王贺、肖明远学习周期&#xff1a;12天…

vim 输入中文

收藏一些有关vim输入中文的链接为了以后方便查看 http://vimim.googlecode.com/svn/vimim/vimim.html http://www.wang3feng.com/2010/07/03/e5-ad-a6vim-e4-ba-8c-e5-a6-82-e4-bd-95-e5-9c-a8vim-e4-b8-ad-e6-9b-b4-e5-a5-bd-e7-9a-84-e8-be-93-e5-85-a5-e4-b8-ad-e6-96-87/ 本…

Web前端工程师的一些常见误区

想要作为一名合格的web前端工程师&#xff0c;那么掌握基本的开发技术是远远不够的&#xff0c;在职场中还要少犯一些错误&#xff0c;本期小编为大家分享的web前端培训教程主要是介绍一些web前端工程师常见的误区&#xff0c;希望对大家有所帮助。 web前端培训分享&#xff1a…

WPF关闭应用程序,释放Window窗口资源方法

WindowsForm里一个Application.Exit();方法就可以关闭应用程序&#xff0c;释放掉资源。 WPF里Application类没有该方法&#xff0c;但是有一个Exit的事件驱动&#xff0c;在WPF应用程序里面关闭程序讲究很多&#xff1a; 在WPF应用程序的关闭是有ShutdownMode属性设置&#xf…

《Cisco/H3C交换机配置与管理完全手册(第2版)》终稿封面和目录

无数网友一直殷切期待和关注的《Cisco/H3C交换机配置与管理完全手册》&#xff08;第2版&#xff09;一书即将于本月底正式上市了。到时对于真实读者&#xff0c;写书评后可以参加全额返款的抽奖活动&#xff0c;加入我的微博(本博客首页中有)&#xff0c;留意我发布的最新资讯…