在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

Visual Basic 和 C#在空类型上的不同

  • 2007-09-19
  • 本文字数:942 字

    阅读完需:约 3 分钟

在.NET 1.0 发布的时候,VB 和 C#没有太多的区别,但是随着第四个版本发布的临近,两者之间的区别逐渐拉开。今天让我们一起看看那些在空类型上可能会困扰开发人员的小地方。

空类型是在.NET 2.0 发布的时候被引入的。使用泛型(Generics),任何值类型都可以被包装成空类型,从而可以有空值。在从前,要达到这个效果只可以通过创建一个定制的类,或者将值封装然后指定给类型对象的一个变量。

C#很快增加了对空类型的语言支持。但是 VB 一直在忙于从 VB 转换到 VB.NET 方面的后遗症,无暇像 C#那样顾及到这一块,虽然可以用空值,但只能在 API 的级别。在 9 版本里,Visual Basi 会对空类型全面支持。它会使用一个和 C#非常接近的语法,但是语义上会有很大的区别。在 C#中,比较操作要么会返回 true,要么返回 false。但是在 VB 中,因为空值的引入,比较操作可能会返回 true,false 或者 null 等。

a=null, b=null Operator C# Result VB Result == true Nothing != false Nothing > false Nothing < false Nothing >= false Nothing <= false Nothing a=1, b=null Operator C# Result VB Result == false Nothing != true Nothing > false Nothing < false Nothing >= false Nothing <= false Nothing 从上表可以看出在 C#中出现的一个非常有意思的异常,在 a 和 b 都是空的时候,a==b 返回的是 true,但是 a>=b 和 a<=b 则返回的是 false。

在遇到检查 Boolean 值的时候,C#是非常清晰易懂的。另外一方面,VB 不得不以某种方式把自己的三状态逻辑映射到 Boolean 值。为了满足像 IF、While 和 Untile 这样的 Boolean 检查,VB 是将 null 等同于 false 处理的。这会导致下面所列出的很有意思的现象:

a = null, b = null <br></br>If a=b Then <br></br>'skipped <br></br>Else <br></br>'this line is executed <br></br>End if <p>If Not (a=b) Then </p><br></br>'skipped <br></br>Else <br></br>'this line is executed <br></br>End if(a=b) 和 Not (a=b) 都返回 null 值,也都被认定为 false。

真正地理解这些语言中细微的差别和不一致,对于使用空类型的开发人员是非常有必要的,否则就会有 Bug 的产生。

查看英文原文: Visual Basic and C#: Differences in Nullable Types

2007-09-19 01:171257

评论

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

减少 95% 资源的向量搜索 | 使用云搜索的 DiskANN

字节跳动云原生计算

搜索算法 向量搜索 DiskANN

nvm报错解决:配置最新淘宝镜像源

源字节1号

开源

PostgreSQL成为最受欢迎的数据库; TiDB马拉松大赛开启

NineData

数据库 postgresql Serverless vector TiDB

Footprint Analytics 助力 Core 区块链实现数据效率突破

Footprint Analytics

区块链 EVM

Milvus × RAG助力快看多业务应用

Zilliz

人工智能 AI Milvus Zilliz 向量数据库

TDengine 流计算实践指南:从平均风速到复杂流计算解析

TDengine

快消品牌企业视角,了解消费品行业数字化新动向

赛博威科技

数字化转型 营销费用管理 赛博威

基于Java+SpringBoot+Vue前后端分离多媒体素材库设计和实现

hunter_coder

后端开发

全新A/B实验能力,火山引擎数智平台上线广告营销实验

字节跳动数据平台

大数据 A/B测试 对比实验 数字化增长

驾控更进阶 长安马自达MAZDA EZ-6树立合资新能源价值新标准

极客天地

分布式系统心跳机制(一)

天翼云开发者社区

架构 分布式系统

Git的一些基本用法

天翼云开发者社区

git 存储

基于Java+SpringBoot+Vue前后端分离大学生一体化服务平台设计和实现

hunter_coder

后端开发

2024青岛消费电子展,打造创新消费,推动“线上+线下”协同发展

AIOTE智博会

消费电子展 消费电子展会

宝塔Docker部署Nuxt3 BBS项目

源字节1号

开源

火山引擎边缘智能平台,让AI走进企业现场

火山引擎边缘云

物联网 智能IoT边缘服务 大模型 AI Agent #大模型

【YashanDB知识库】开源调度框架Quartz写入Boolean值到YashanDB报错

YashanDB

yashandb 崖山数据库 崖山DB

基于Java+SpringBoot+Vue前后端分离反欺诈平台设计和实现

hunter_coder

后端开发

【YashanDB知识库】列与存储过程中重名变量/别名问题

YashanDB

yashandb 崖山数据库 崖山DB

亚信安慧AntDB数据库与用友Yon BIP商业创新平台完成兼容性互认证

亚信AntDB数据库

CBR云备份与恢复管控简介

天翼云开发者社区

云计算 云服务 云备份

Visual Basic和C#在空类型上的不同_.NET_Jonathan Allen_InfoQ精选文章