写点什么

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

评论

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

架构训练营 - 模块 4 作业

焦龙

架构实战营

模块五作业

沐风

世界女性科技群落(一):一面喑哑、一面高亢的非洲鼓

脑极体

SAP OData 编程指南

汪子熙

API SAP OData 11月日更

linux远程复制文件命令小总结

入门小站

Linux

[Pulsar] 使用Partitioned Topic提高吞吐

Zike Yang

Apache Pulsar 11月日更

财经大课:通货膨胀的逻辑

石云升

学习笔记 财经思维 11月日更

Vue进阶(贰零壹):JS合并两个数组方法详解

No Silver Bullet

Vue 数组 11月日更

.NET6新东西--struct优化

喵叔

11月日更

JavaScript 数组方法 slice() 的 5 个示例

devpoint

slice JavaScrip 11月日更

kafka常用命令

williamcai

kafka

工作三原则

ok绷

模块四作业

doublechun

「架构实战营」

区块链新闻编辑部成立,看区块链如何助力新闻传播?

CECBC

CentOS环境下Redis的安装和配置

Empty

redis

DDD是软件设计思维方式的转变

Bruce Talk

领域驱动设计 DDD

Apache Pulsar 与 Kafka 性能比较:延迟性(测试方法)

Apache Pulsar

大数据 kafka 分布式 云原生 Apache Pulsar

20 k8s之持久性存储卷

穿过生命散发芬芳

k8s 11月日更

使用 Java connector 消费 ABAP 系统的函数

汪子熙

Java SAP abap 11月日更

一些关于原宇宙的思考

Simon

元宇宙 Metaverse

【解析】通证经济的分类及用途

CECBC

区块链是什么

Rayjun

区块链

如何用JavaScript实现add(1)(2)(3)

空城机

JavaScript 11月日更

千万级学生管理系统的考试试卷存储方案设计

波波

「架构实战营」

和12岁小同志搞创客开发:手撕代码,做一款亮度可调节灯

不脱发的程序猿

少儿编程 DIY 智能硬件 创客开发 Arduino

区块链,不是元宇宙的全部

CECBC

模块四作业

覃飞

30分钟学习go语言

坚果

Go 语言 11月日更

模块五作业

bob

「架构实战营」

在线等差数列求和计算器

入门小站

工具

聊聊你眼中的spring的事务是怎么样的?

卢卡多多

spring事务管理 11月日更

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