写点什么

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

评论

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

云原生技术:实践探索与未来展望

不会算法。

人人都是智能体开发者!百度灵境矩阵打造国内最完整智能体生态

科技热闻

全新升级!名企私教服务加盟全栈开发与自动化测试班,成就你的技术梦想

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

测试

专家论道:构建完善的新型显示产业生态体系

Geek_2d6073

软件测试/测试开发/丨人工智能与测试开发沙龙(PPT和回放集锦)

测试人

人工智能 软件测试

开班在即 | 测试开发线下高薪私教班助力你的职场晋升

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

测试

测试开发 | 游戏开发中的人工智能创新:探索数字娱乐的未来

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

测试

如何通过ETLCloud的API对接功能实现各种SaaS平台数据对接

RestCloud

SaaS API ETL

测试开发 |AI驱动的健康监测与管理:数字化时代的医疗创新

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

测试

智能辅助技术的未来前景:创新与便利的引领者

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

测试

只需一个bitget钱包,让你的web3体验翻倍

鳄鱼视界

1688商品评论数据接口(1688.item_review)

tbapi

1688API接口 1688商品评论接口 1688商品评论数据接口 1688商品评价接口 1688商品评论API

万界星空科技铜线MES、漆包线MES系统

万界星空科技

生产管理系统 智能制造 mes 漆包线mes 铜线mes

高效GO语言集成开发工具 GoLand 2023 注册码中文版

mac大玩家j

代码编辑器 Mac软件 语言开发工具

测试用例设计方法六脉神剑——第六剑:心法至简,百家之长集成

京东科技开发者

石磊:BANI时代下,企业人才管理破局之道

用友BIP

智能招聘

测试开发 | 物流与供应链中的智能优化

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

测试

2023新型显示产业技术创新专业赛圆满收官

Geek_2d6073

为什么电商系统必须选择定制开发?

飞算JavaAI开发助手

“追求卓越·数创未来”CITE2024深圳电子展,火爆招商中

AIOTE智博会

电子展 深圳电子展 电子信息展 电博会

XSKY SDS V6.3 版本发布:持续强化非结构化存储和管理能力

XSKY星辰天合

个人年度总结:大模型驱动技术的趋势洞察

Geek-yan

IPQ8074/IPQ8072 What's the performance difference?|8X8 4X4 High Performance 802.11ax Solution

wallyslilly

IPQ8072 IPQ8074

只需一个bitget钱包,让你的web3体验翻倍

威廉META

万界星空MES系统的十大核心功能

万界星空科技

数字化转型 MES系统 智能制造 mes 万界星空科技mes

CQ 社区版 V2.7.0 发布 | 数据源版本扩充、新增批量执行功能等

BinTools图尔兹

数据库 运维 数据安全 dba 数据库管理

企业级“RAS”的数据平台如何炼成?

Geek_2d6073

Amazon Toolkit — CodeWhisperer 使用

亚马逊云科技 (Amazon Web Services)

人工智能 云上探索实验室 Amazon CodeWhisperer Amazon Cloud9

Mac电脑文献管理推荐 EndNote 21激活最新版

胖墩儿不胖y

Mac软件 文献管理工具 文献工具

高薪程序员的三大窍门,你准备好了吗?

飞算JavaAI开发助手

测试开发 | 创业与人工智能的密切关系

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

测试

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