写点什么

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

评论

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

一文了解 Go time 包的时间常用操作

陈明勇

Go golang time

从零手写react-router

helloworld1024fd

JavaScript

简单谈谈Redis中的几种java客户端以及优缺点!

风铃架构日知录

Java redis 程序员 程序人生 客户端

《隐私计算白皮书(2022年)》概览

京东科技开发者

技术 安全 隐私保护 白皮书 企业号 1 月 PK 榜

程序员该如何用“高科技”智能地教狗狗上厕所

风铃架构日知录

人工智能 深度学习 程序人生 后端 系统架构

React面试:谈谈虚拟DOM,Diff算法与Key机制

beifeng1996

React

前端二面经典vue面试题指南

bb_xiaxia1998

Vue

高级前端常考手写面试题合集

helloworld1024fd

JavaScript

京音平台-一起玩转SCRM之电销系统

京东科技开发者

架构设计 系统 scrm 企业号 1 月 PK 榜 电销

SOA 和微服务有何区别?

江南一点雨

Java 微服务 springboot SOA

那些炫酷的CSS文字效果之诗词《兔》

南城FE

CSS css3 前端 动画

阿里云开源大数据平台EMR全面升级 性能最高可提升6倍

阿里云大数据AI技术

大数据 云原生 大数据 开源

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

bb_xiaxia1998

Vue

百度前端经典vue面试题整理

bb_xiaxia1998

Vue

WWW 是否应该属于 URL?

devpoint

Cookie url SEO www

表格集算表高性能原理——怎样实现纯前端百万行数据秒级响应

葡萄城技术团队

年终盘点丨最受开发者欢迎的文章 TOP20

阿里巴巴云原生

阿里云 云原生

社招前端react面试题整理

beifeng1996

React

从零开始实现一个Promise

helloworld1024fd

JavaScript

Java Netty框架自建DNS代理服务器教程

小小怪下士

Java 程序员 Netty DNS

每日一题之Vue的异步更新实现原理是怎样的?

bb_xiaxia1998

Vue

前端必会手写面试题合集

helloworld1024fd

JavaScript

醉三皇成为第12届北京国际网络电影展官方指定用酒品牌

联营汇聚

如何实现发送评论时总数自动加一?

Towify

分布式是大数据处理的万能药?

jiangxl

react的jsx和React.createElement是什么关系?面试常问

beifeng1996

React

排障定位时间缩短一半, 博睿数据如何赋能青岛住房公积金管理中心

博睿数据

APM AIOPS 智能运维 博睿数据 精选案例

如何使用API Hub 实现一个图片列表

Towify

前端高频react面试题整理

beifeng1996

React

带你用20张图了解什么是 JVM 运行时数据区

风铃架构日知录

Java 程序员 JVM 码农 内存

安畅携手阿里云共建Landing Zone方案,助力企业上云无忧

云布道师

阿里云

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