写点什么

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

评论

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

用友BIP+DeepSeek催生超级智能体:10分钟构建一个企业级智能助理

用友智能财务

AI for Science

【FAQ】HarmonyOS SDK 闭源开放能力 —Ads Kit(2)

HarmonyOS SDK

harmoyos

小红书商品详情API接口(小红书API系列)

tbapi

小红书API 小红书数据采集 小红书商品详情接口

工程项目管理系统(源码+文档+讲解+演示)

深圳亥时科技

从零上手 Fabric8 KubernetesClient

FunTester

昇腾MindStudio模型量化方案,助力企业轻量级部署DeepSeek

新消费日报

零信任应用侧理性选择并期许未来

芯盾时代

身份安全 零信任 统一身份管理平台

DeepSeek 入门指导手册——从入门到精通【1】

派大星

GreatSQL修改配置文件参数无法生效

GreatSQL

数据库

反向海淘独立站想做好?这7个核心能力必须焊死!

代码忍者

云上玩转DeepSeek系列之四:DeepSeek R1 蒸馏和微调训练最佳实践

阿里云大数据AI技术

人工智能 模型训练 Qwen PAI DeepSeek

大数据AI一体化开发再加速:DataWorks 支持GPU类型资源

阿里云大数据AI技术

大数据 Serverless AI 数据处理 Dataworks

云电脑接入DeepSeek?探讨ToDesk云电脑、海马云、顺网云的AI潜能

不叫猫先生

AI 云电脑 DeepSeek

Svelte 最新中文文档教程(18)—— 命令式组件 API

冴羽

vue.js 前端 前端框架 Svelte SvelteKit

内核探究|Apache Cloudberry 透明数据加密(TDE)技术解析

酷克数据HashData

Prometheus 历史峰值看不到了,这监控不准啊

巴辉特

Prometheus Nightingale 监控告警 夜莺监控 运维监控

AutoMQ 集成 Debezium

AutoMQ

云计算 大数据 分布式 流处理 流数据

项目调度管理系统(源码+文档+讲解+演示)

深圳亥时科技

项目管理全流程平台(源码+文档+讲解+演示)

深圳亥时科技

通过 Airbyte 将数据从 AutoMQ 迁移同步到云数仓

AutoMQ

云计算 大数据 kafka 部署 流处理

直播预告 | 连播2天!DeepSeek爆红密码+对AI技术、职业与商业的影响

天翼云开发者社区

AI应用 DeepSeek

华为游戏中心游戏节盛大开启,鸿蒙原生游戏实力强得飞起

最新动态

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