写点什么

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

评论

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

一文教你在华为云上部署Discuz论坛网站

华为云开发者联盟

MySQL 云原生 华为云 华为云开发者联盟 企业号2024年7月PK榜

在 Kubernetes 上用 KubeBlocks + Dify 快速构建生产级 AIGC 应用

小猿姐

redis postgresql Kubernetes operator qdrant

性能测试:性能测试计划

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

测试

软件测试学习笔记丨Allure2报告定制

测试人

软件测试

华为云DTSE助力虎彩鲜檬优化运维效率,助力迁移上云

华为云开发者联盟

云原生 华为云 华为云开发者联盟 华为云DTSE 企业号2024年7月PK榜

推动工业数字化转型:天谋科技与中国恩菲完成兼容性互认证

Apache IoTDB

基于51单片机设计的呼吸灯

DS小龙哥

7月月更

对删库跑路Say No!

芯盾时代

访问控制 统一身份管理平台 访问权限 特权账号管理

性能测试:性能测试计划

测试人

软件测试

阿里巴巴商品详情API接口(店铺|标题|主图|价格|SKU属性等)

tbapi

阿里巴巴 阿里巴巴商品详情数据接口 阿里巴巴API 阿里巴巴商品数据采集

CentOS 停服后,服务器 OS 路在何方?

腾源会

CentOS 停服

Claude3.5 Opus 注册开通使用全教学,手把手教程

蓉蓉

Claude

电机工厂MES系统-提升生产效率与质量的关键

万界星空科技

生产管理系统 mes 万界星空科技 电机行业 电机MES

“混合办公”模式成功的背后,靠什么支撑?

ToB行业头条

如何利用爱回收API高效获取商品数据?实战教程分享

tbapi

爱回收 爱回收API接口

人工智能与专家系统:构建智慧决策的未来

天津汇柏科技有限公司

人工智能’

咦?KaiwuDB 有大事要说?

KaiwuDB

可信数据库 KaiwuDB 分布式多模数据库

活动预告|想更了解流式数据湖?亚马逊云科技数据开源软件-流式数据湖 Tech Talk来啦!

AutoMQ

AWS AutoMQ 流式数据湖

京东商品详情数据接口(JD.item_get)

tbapi

京东商品详情数据接口 京东API接口 京东商品数据采集 京东商品详情数据

一等奖!KaiwuDB & 西电联合成果又创佳绩

KaiwuDB

云原生数据库 KaiwuDB KaiwuDB 产学研

聚美优品商品详情数据接口(jumei.item_get)

tbapi

聚美优品API接口 聚美优品商品数据接口 聚美优品商品详情接口

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