QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

评论

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

SpringloC容器的依赖注入源码解析(3)

爱好编程进阶

Java 程序员 后端开发

Tomcat介绍(三)

爱好编程进阶

程序员 后端开发

「每日一问」并发编程的特性是什么

爱好编程进阶

Java 程序员 后端开发

MySQL数据库所有知识点最详细讲解,内置官方文档、个人理解

爱好编程进阶

程序员 后端开发

【解决】jsPDF之长图片生成PDF

爱好编程进阶

Java 程序员 后端开发

讨论两种Redis中Token的存储方式

华为云开发者联盟

Token key 存储token userid

SpringBoot整合MyBatis完整详细版

爱好编程进阶

Java 程序员 后端开发

「2021-老胡的年终总结」

爱好编程进阶

程序员 后端开发

等保和分保的区别是什么?哪个更厉害?

行云管家

网络安全 等保 等级保护 分保

HTTP请求转发那些事:你可能不知道的Hop-by-hop Headers和End-to-end Headers

华为云开发者联盟

HTTP 请求转发 web 容器 F5

AI简报-视频去交错(Deinterlance)

AIWeker

人工智能 深度学习 5月月更 去交错

一文聊透 Netty IO 事件的编排利器 pipeline | 详解所有 IO 事件的触发时机以及传播路径

bin的技术小屋

网络编程 Netty java netty 5月月更

SpringDataJPA之关联关系

爱好编程进阶

Java 程序员 后端开发

史上最全图解JVM,京东小哥带你了解性能提升100%背后的秘密武器

爱好编程进阶

Java 程序员 后端开发

云计算的云是指什么?最简单的解释是什么?

行云管家

云计算 云服务 私有云 混合云

leetcode38

爱好编程进阶

程序员 后端开发

SpringBoot-MVC自动配置原理

爱好编程进阶

Java 程序员 后端开发

优化了MYSQL大量写入问题,老板奖励了1000块给我

爱好编程进阶

Java 程序员 后端开发

厉害了!把 HashMap 剖析的只剩渣了!

爱好编程进阶

Java 程序员 后端开发

如何在缺乏商业项目经验的前提下成功通过面试,兼说我如何甄别非商业项目经验

爱好编程进阶

Java 程序员 后端开发

JAVA-使用注解实现Excel表头多语言导出

JayJay

5月月更

极光笔记 | 极光基于元数据驱动数据治理浅谈

极光JIGUANG

数据治理 元数据

编写自己的 WordPress 模板

海拥(haiyong.site)

WordPress 5月月更

【直播预告】程序员修炼之道——如何实现敏捷开发与稳健运行的有机统一

FinClip

程序员 小程序运营

【Jvm】Jvm类加载机制

爱好编程进阶

Java 程序员 后端开发

大佬总结的4条宝贵经验,送给初入职场的你,从此一飞冲天

爱好编程进阶

Java 程序员 后端开发

“超级计算机”——GPU云服务器

Finovy Cloud

gpu GPU服务器 GPU算力

令人欣慰!阿里大牛把Spring微服务架构设计整理成了500多页文档,真香

爱好编程进阶

Java 程序员 后端开发

【刷题第十天】21. 合并两个有序链表

白日梦

5月月更

使用APICloud AVM多端框架开发企业移动OA办公的项目实践

YonBuilder低代码开发平台

企业应用 APP开发 APICloud 多端开发 avm.js

摆平各类目标检测识别AI应用,有它就够了!

华为云开发者联盟

计算机视觉 CANN 昇腾 目标检测识别 YoloV3

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