写点什么

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

评论

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

喜报丨时序数据库 IoTDB 荣获“创客北京 2024”创新创业大赛专项赛优胜奖

Apache IoTDB

《使用Gin框架构建分布式应用》阅读笔记:p127-p142

codists

golang gin 编程人 codists

天润融通推出智能语音导航,自动识别客户意图实现高效分流

天润融通

天润融通大模型文本机器人,让客服迈入“无人化”的第一步

天润融通

软件测试学习笔记丨Selenium学习笔记:三种等待方式

测试人

软件测试

免费报名!第五届“医疗大数据学术交流及 Datathon 活动”诚邀您的参加

ModelWhale

低代码开发:数字化转型,轻松“点”到为止!

不在线第一只蜗牛

低代码

HarmonyOS NEXT华为音乐焕新升级,打造高品质沉浸式“音乐厅”

最新动态

深入理解 JavaScript 中的剩余参数和扩展运算符

秃头小帅oi

和鲸科技亮相重庆市医学会临床流行病学和循证医学分会 2024 学术年会,探索临床研究标准化新路径

ModelWhale

人工智能 大数据 大模型 临床医学

可观测日北京|观测云:可观测性需要做到“三个一”

观测云

观测云

第71期 | GPTSecurity周报

云起无垠

揭秘1024程序员节彩蛋:致敬鸿蒙生态一日千里的幕后英雄

最新动态

麦杰科技携手小伙伴,一起做那些“难而正确的事”

麦杰研究院

天润融通知识库赋能一线客户运营,不是宝妈也可以成为育儿专家

天润融通

科技是把双刃剑,巧用技术改变财务预测

智达方通

企业管理 数字化 科技 全面预算管理

系统数据安全解决方案(医疗行业Word原件)

金陵老街

信息安全 数据安全 数据互联互通

望繁信科技创始人索强出席2022福布斯中国·青年海归菁英100人评选颁奖典礼

望繁信科技

数字化转型 流程挖掘 流程资产 流程智能 望繁信科技

征程 6 环视快启 sample

地平线开发者

自动驾驶 算法

MatrixOne 助力 StoneCastle 打造高性能金融分析系统

MatrixOrigin

数据库 金融 HTAP

软件需求分析报告完整版(软件项目套用原件)

金陵老街

软件设计 需求分析 软件需求设计

Claude 大更新,AI 可模仿人类访问电脑;月之暗面招募微软亚研院谭旭,研发类 GPT- 4o 的端到端语音模型

RTE开发者社区

ETLCloud搭配MySQL | 让关系型数据库更智能

谷云科技RestCloud

MySQL 数据库 sql ETL 数据集成

下一代 AI 陪伴 | 平等关系、长久记忆与情境共享 | 播客《编码人声》

RTE开发者社区

微博热搜API:实时数据获取与处理

幂简集成

API 微博

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