写点什么

关于 C#中非可空类型的一点建议

  • 2012-10-03
  • 本文字数:807 字

    阅读完需:约 3 分钟

如果非期望值是问题所在的话,那么我们就应该努力消除它们。尽管我们几乎从未期望过null(空),然而类型系统却强迫我们装出一副很需要它的样子。——Craig

尽管这句话已经被.NET 开发者在这些年来讲过无数次。然而修正此问题并非易事,不仅仅是在变量上拍个属性或其他修饰那么简单。更严峻的挑战之一就是,要是T为非可空引用类型的话,那么default<T>该如何处理。Craig 写道,

这里的根本问题在于 C#中根深蒂固的假设:该假设即每种类型都有默认值。试想一下:如果T没有(或可能没有获得)默认值,那么编译器在计算default(T)、初始化类型 T 的字段、或初始化某个类型 T 的新数组中的数组项时就会无值可用。由于一谈到非可空引用类型就会涉及此问题,尽管某些引用类型拥有适当的非空默认值(例如非空字符串类型的默认值可能是空字符串),然而对于大多数引用类型而言却并非如此。试想一下:IEnumerator<int>的默认非空值是什么?IObservable<bool>呢?UserControl呢?NetworkStream呢?答案很简单,它们没有任何默认非空值。而你能做的最好方法就是,给出某种模仿实例,即一旦你尝试使用该实例就会导致失败……不过我们已经有了那种实例,并称之为null(空)。

在题为非可空类型对 C#:修正十亿美元的错误的文章中,Craig 引入了两个新概念:

  • T!用于指示类型 T 为非可空类型。这也可以用于普通类型及类型参数。
  • withdefault(T)用于把非可空引用类型参数转变为相应的可空类型参数。

要是需要构建私有字段或数组,就将其类型声明为withdefault(T),而不是类型T。然后在读取该字段或数组时,可以将其重新强制转换非可空类型T。这种强制转换本身是不安全的,而且倘若没有正确构造就有可能抛出异常,不过一旦成为了非空,开发者便可如鱼得水。要了解这样做所产生的后果,最好还是通过 Craig 文章中的例子来解释。

如果对此主题有兴趣,可以在用户反馈网站上对非空引用类型的建议进行投票

查看英文原文: A Proposal for Non-Nullable Types in C#

2012-10-03 13:091922
用户头像

发布了 55 篇内容, 共 19.4 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

缓存与主副本数据一致性系统设计方案(下篇)

HAibiiin

架构 系统设计 分布式系统 缓存一致性 主从架构

如何在 Go 项目中隐藏敏感信息,比如避免暴露用户密码?

左诗右码

Windows - 内存优化

沉默的老李

内存 windows 11

软件测试类文档,测试文档合集,软件全套资料集(原件)

金陵老街

软件文档 测试文档

产品经理如何做好需求管理和分析

易成研发中心

需求管理 需求分析

Spring高手之路25——深入解析事务管理的切面本质

砖业洋__

spring 事务管理

使用 DFU 模式修复或恢复 Mac 固件

sysin

Mac DFU

需求管理和产品规划有什么异同点

易成研发中心

需求管理 需求管理工具

鸿蒙原生开发手记:02-服务卡片开发

少湖说

鸿蒙 HarmonyOS

哪些电子合同系统适合企业?9款详细介绍

爱吃小舅的鱼

电子合同系统

一次封装,解放双手:Requests如何实现0入侵请求与响应的智能加解密

LLLibra146

Python 代码技巧 requests 代码复用 自动加解密

Python创建虚拟环境报错:Error: Command......

codists

Python

LED显示屏的亮度真的是越高越好吗?

Dylan

屏幕亮度 LED显示屏 全彩LED显示屏 led显示屏厂家

体验免费开箱即用的AI工具:Blackbox.AI

袁袁袁袁满

人工智能 ChatGPT 免费AI工具 GPT-4o 大模型工具

伟创力收购JetCool以扩大数据中心和电源产品组合

财见

数聚存储,智慧未来:浪潮信息分布式存储在人工智能时代的创新与应用

财见

亿珑能源控股有限公司与TMT Acquisition Corp完成合并

财见

寻找最佳合同电子签系统?10款实用方案

爱吃小舅的鱼

合同电子签系统

做项目管理需要哪些技能

爱吃小舅的鱼

项目管理

Python哪个框架合适开发速卖通商品详情api?

科普小能手

API Python框架 Python开发 API 接口 速卖通API接口

鸿蒙Flutter实战:13-鸿蒙应用打包上架流程

少湖说

鸿蒙 HarmonyOS

IaaS、PaaS和SaaS的区别

兮动人

IaaS、PaaS和SaaS

微创软件海外拓展新动向:日本Cosmo Design公司被纳入版图

财见

ACCA联合发布《2024年中国共享服务领域调研报告》,揭示行业数智化转型新趋势

财见

鸿蒙原生开发手记:01-元服务开发

少湖说

鸿蒙 HarmonyOS

关于C#中非可空类型的一点建议_C#_Jonathan Allen_InfoQ精选文章