AICon 深圳站聚焦 Agent 技术、应用与生态,大咖分享实战干货 了解详情
写点什么

关于 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:092133
用户头像

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

关注

评论

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

手把手教你如何扩展(破解)mybatisplus的sql生成 | 京东云技术团队

京东科技开发者

mybatis sql MyBatisPlus Mybatis-Plus 企业号11月PK榜

火山引擎ByteHouse联合Apache Airflow,让数据管理更加高效

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号11月PK榜

线上SQL超时场景分析-MySQL超时之间隙锁 | 京东物流技术团队

京东科技开发者

MySQL 数据库 间隙锁 企业号11月PK榜 SQL超时

直播实时数仓基于DataLeap开放平台在发布管控场景的业务实践

字节跳动数据平台

大数据 数据中台 数据安全 数据研发 企业号11月PK榜

云时代,如何保障运维安全?

尚思卓越

运维 网络安全 堡垒机

TiDB快速部署工具

TiDB 社区干货传送门

实践案例 集群管理 管理与运维 安装 & 部署

微服务架构下的调试进阶:多环境多服务调试实践与策略

Apifox

架构 微服务 后端 多服务 多环境

另辟蹊径者 PoseiSwap:背靠潜力叙事,构建 DeFi 理想国

鳄鱼视界

stable diffusion为什么能用于文本到图像的生成

3D建模设计

Stable Diffustion 文本到图像 AI 绘图

《央国企数字化产业赋能图谱》编制及申报开启

信通院IOMM数字化转型团队

IOMM 央国企数字化转型 央国企数字化产业赋能图谱

PDF Reader Pro 3.0 for mac(pdf阅读器)

展初云

Mac pdf阅读器 PDF Reader Pro

SAM + 用于文本到图像修复的稳定扩散

3D建模设计

Stable Diffustion 稳定扩散 文本生成图像

为什么OpenAPI是未来企业数字化转型的决定性因素

云计算 软件开发 华为云

EC2的置放群组

孤虹

亚马逊云 EC2 置放群组

【论文解读】针对生成任务的多模态图学习

合合技术团队

人工智能 机器学习 深度学习 论文 多模态学习

远程运维的定义以及优点详细讲解-行云管家

行云管家

运维 IT运维 远程运维 运维软件 协同运维

DataGrip 2023 Mac(多引擎数据库管理工具)

展初云

Mac datagrip 数据库软件

百度CTO王海峰:文心一言用户规模已达7000万

飞桨PaddlePaddle

文心一言4.0

源译识 | 译文分享:Elasticsearch诉Amazon商标侵权案

开放原子开源基金会

Project Office X for Mac项目管理工具

展初云

Mac 项目管理软件 Project Office X

一起学Elasticsearch系列-Mapping

Java随想录

Java 大数据 搜索 ES

分布式数据库 GaiaDB-X 与宝兰德应用服务器完成兼容互认

Baidu AICLOUD

分布式数据库

Amazon EC2 Serial Console 现已在其他亚马逊云科技区域推出

亚马逊云科技 (Amazon Web Services)

API cli iam Amazon EC2

一分钟带你了解光模块

小魏写代码

如何在本地运行稳定扩散模型

3D建模设计

Stable Diffusion Ai绘图 文本到图像

谈谈压测方案的那点事 | 京东物流技术团队

京东科技开发者

测试 性能测试 压力测试 企业号11月PK榜 大促备战

新方向!文心一言X具身智能,用LLM大模型驱动智能小车

飞桨PaddlePaddle

人工智能 文心一言

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