AICon 深圳站聚焦 Agent 技术、应用与生态,大咖分享实战干货 了解详情
写点什么

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

评论

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

ShareSDK iOS端 UniversalLink生成最佳实践

MobTech袤博科技

ios universal link

C++中的继承

可口也可樂

c++ 继承 10月月更

线下面授前端培训哪个机构好

小谷哥

IM跨平台技术学习(六):网易云信基于Electron的IM消息全文检索技术实践

JackJiang

「聚变」前端 & 客户端 | 第十七届 D2 终端技术大会,来了

阿里巴巴终端技术

阿里巴巴 前端 移动端 客户端 D2

手写现代前端框架diff算法-前端面试进阶

helloworld1024fd

JavaScript

嵌入式 Linux 入门(六、Shell 脚本编程下:Shell 脚本语法)

矜辰所致

Linux Shell shell脚本编程 10月月更

华为云全球加速GA,助力中小企业突破发展瓶颈!

清欢科技

在北京web前端培训后好找工作

小谷哥

大数据技术培训零基础学习怎么样

小谷哥

告别宽表,用DQL成就新一代BI

石臻臻的杂货铺

大数据 BI 10月月更

react源码中的hooks

flyzz177

React

浅谈OpenHarmony LiteOS-A内核之基础硬件——中断控制器GIC400

OpenHarmony开发者

OpenHarmony

华为云全球加速GA,让企业获得更优质的服务体验

清欢科技

一图看懂融云「百幄」数智办公平台

融云 RongCloud

办公 数智化

每日一题之Vue数据劫持原理是什么?

bb_xiaxia1998

Vue

前端二面手写面试题总结

helloworld1024fd

JavaScript

华为云弹性公网IP服务,为企业敲开互联网大门

清欢科技

大数据技术培训零基础学习怎么样

小谷哥

使用参数非参数和机器学习方法分析印度降雨变化,能给我国带来什么警示?

GPU算力

C++中的多态

可口也可樂

c++ 多态 10月月更

数据结构-二叉树中的操作

可口也可樂

数据结构 二叉树 10月月更

GaiaX开源解读 | 基于优酷业务特色的跨平台技术

阿里巴巴文娱技术

开源 移动开发 移动端开发

使用实时3D渲染软件创建身临其境的数字体验

Finovy Cloud

3D渲染 云渲染 图像软件

react源码中的fiber架构

flyzz177

React

在vue的v-for中,key为什么不能用index?

bb_xiaxia1998

Vue

华为云全球加速GA,助跨境企业云上业务通达

清欢科技

前端高频vue面试题合集

bb_xiaxia1998

Vue

手写JavaScript常见5种设计模式

helloworld1024fd

JavaScript

TiKV 源码阅读三部曲(二)读流程

PingCAP

TiKV 源码解读

java培训和自学相比效果如何

小谷哥

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