HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

评论

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

下一个加密货币轰动:2024 年成功案例的 7 个精选

dappweb

加密货币 ao

区块链技术在未来大国博弈的作用

dappweb

区块链 ao

区块链在物联网领域的应用前景如何

dappweb

区块链 ao

AI+阅读,华为阅读带来鸿蒙生态下的新体验新能力

最新动态

蓝易云 - javaee springMVC自定义转换类实现日期类型转换

百度搜索:蓝易云

Java json Linux 运维 Spring MVC

普通人接触币圈应注意

dappweb

加密货币 ao

边缘云与应用场景

dappweb

ao 边缘云

边缘云与硬件

dappweb

ao 边缘云

边缘云与软件平台

dappweb

ao 边缘云

万象革新,开启鸿蒙原生应用生态新篇章

最新动态

蓝易云 - Java:jackson实现json缩进美化输出

百度搜索:蓝易云

Java json Linux 运维 Jackson

直击HDC2024开发者主题演讲 HarmonyOS NEXT开发者解决方案全面升级

最新动态

区块链模块化:构建灵活、可扩展的未来网络

dappweb

区块链 ao

GitHub标星破千!这份Python并行编程手册,可以封神了!

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言 并行编程

能通俗易懂的说一下区块链

dappweb

区块链 ao

人们为何希望比特币重生

dappweb

比特币 ao

华为云618营销季Web及移动App上云体验,助力软件行业创新发展

YG科技

蓝易云 - linux教程:sed替换以某字符串开头的行

百度搜索:蓝易云

云计算 Linux 运维 sed 云服务器

区块链中的共识机制是如何运作的

dappweb

区块链 ao

投资者如何降低加密货币的风险

dappweb

加密货币 ao

区块链零知识证明:未来数据的“隐身斗篷”

dappweb

区块链 ao

解密区块链比特币费用:背后的逻辑与影响因素

dappweb

区块链 ao

2024-06-22:用go语言,给定一个起始下标为 0 的长度为3的整数数组 nums,根据这些数字构建三角形。 如果无法构成三角形,则返回 “none“; 否则根据三角形的边长关系返回对应类型的字

福大大架构师每日一题

福大大架构师每日一题

边缘计算:重塑医疗领域未来的关键力量

dappweb

边缘计算 ao

华为阅读携手多家头部出版机构,共创数字阅读新纪元

最新动态

区块链跨链互操性:打破孤岛,构建互联互通的未来

dappweb

区块链 ao

蓝易云 - javaee springMVC的简单使用jsp页面在webapp和web-inf目录下的区别

百度搜索:蓝易云

Linux 运维 Web Java EE webapp

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