2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

评论

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

BOE(京东方)珠海晶芯COB量产交付仪式举办 赋能MLED产业新发展

爱极客侠

【每日学点HarmonyOS Next知识】获取组件尺寸、无埋点方案、海报组件、路由表、文字渐变效果

轻口味

HarmonyOS HarmonyOS NEXT

VMware ESXi 7.0U3s macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版

sysin

esxi

VMware ESXi 6.7U3v macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版

sysin

esxi

培训中心教务系统(源码+文档+讲解+演示)

深圳亥时科技

【每日学点HarmonyOS Next知识】Web交互、列表拖拽、横屏后布局、Event序列问题、Scroll与Web组合

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】状态栏控制、片段按钮点击回调、绘制组件、取消按钮与输入框对齐、父调子组件方法

轻口味

HarmonyOS HarmonyOS NEXT

淘宝图片搜索商品列表API接口全攻略

tbapi

淘宝API 淘宝拍立淘接口 淘宝图片搜索API

使用 XDP 和 IPVS 实现 QUIC 负载均衡

EMQ映云科技

负载均衡 QUIC协议

芯盾时代移动办公融合解决方案

芯盾时代

远程办公 iam 统一身份管理平台

征程 6 工具链 BEVPoolV2 算子使用教程 【2】-BEVPoolV2 QAT 链路实现示例

地平线开发者

自动驾驶; 算法工具链 地平线征程6

【最新版】计算机二级Python题库及满分代码

大头博士先生

【每日学点HarmonyOS Next知识】列表匀速滑动、判断页面是否在路由栈、导航栏顶部加一条横线、滑动冲突、进度条自定义圆角大小

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】 状态变量、公共Page、可见区域变化回调、接收参数、拖拽排序控件

轻口味

HarmonyOS HarmonyOS NEXT

AI大模型本地化部署的优化

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

VMware ESXi 8.0U2d macOS Unlocker & OEM BIOS 标准版和厂商定制版

sysin

esxi

线下活动:与宇树 G1 机器人零距离,具身智能畅谈体验会丨社区来稿

声网

【每日学点HarmonyOS Next知识】多继承、swiper容器、事件传递、滚动安全区域、提前加载网络图片

轻口味

HarmonyOS HarmonyOS NEXT

大模型本地化部署的应用场景

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

AI 大模型本地化部署的调试

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

洗鞋小程序(源码+文档+讲解+演示)

深圳亥时科技

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