2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:171226

评论

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

谈谈我对 AIGC 趋势下软件工程重塑的理解

阿里云云效

阿里云 云原生 AIGC 通义灵码

Python的流程控制,你真的会了吗?(一)

霍格沃兹测试开发学社

Golang数据库事务实践

俞凡

golang

架构实战营 - 模块四作业

满心

架构实战营

知识图谱在五大智能领域的应用

悦数图数据库

知识图谱

聚道云助IT公司破解数据同步难,高效转型新利器!

聚道云软件连接器

案例分享

聚道云软件连接器:助力企业财务效率提升的成功案例

聚道云软件连接器

案例分享

“不知今夕是何年”的周基年解法|得物技术

得物技术

Java 程序员 前端 后端 企业号 4 月 PK 榜

解密通义灵码:软件研发工具的“大脑”

阿里云云效

阿里云 云原生 通义灵码

我们是如何测试人工智能的(一)基础效果篇(内含大模型的测试内容)

测吧(北京)科技有限公司

SQLite的第一版不过是在GDBM上套了个壳

胡译胡说

sqlite 数据库 历史 KV存储

inBuilder低代码平台新特性推荐-第十七期

inBuilder低代码平台

开源 低代码

跨界创新,数字赋能:探索低代码平台的多元化应用场景

优秀

低代码 低代码开发平台 低代码平台 低代码应用场景

无需注册即可使用 ChatGPT;Poe 创始人:大模型幻觉是创业公司的机会丨RTE 开发者日报 Vol.176

RTE开发者社区

被 AI 写的游戏代码砸中是什么感觉 | 10 分钟打造你的超级 AI 编码助手

阿里云云效

阿里云 云原生 通义灵码

Flink Checkpoint 状态后端详解:类型、特性对比及场景化选型指南

木南曌

flink 实时计算

从 Redis 开源协议变更到 ES 国产化:一次技术自主的机遇 记某客户的一次无缝数据迁移

极限实验室

console Gateway easysearch

ETL中如何自定义规则

谷云科技RestCloud

数据同步 ETL 数据规则

10分钟带你了解 Linux 系统中的 Top 命令

霍格沃兹测试开发学社

Java 的诞生——从 Oak 到 Java

胡译胡说

Java 历史

劳动力规划:对企业加速运营的未来展望

智达方通

企业管理 企业转型 全面预算管理 劳动力规划

昇思之路,从AI基础软件到生态繁花

脑极体

AI

Flutter应用在苹果商店上架前的准备工作与注意事项

微调工程师岗位可能并不存在,但使用 AI 编码工具已经成为刚需

阿里云云效

阿里云 云原生 AIGC 通义灵码

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