写点什么

让 C#中的 0 等于 0

  • 2009-06-01
  • 本文字数:484 字

    阅读完需:约 2 分钟

C#对装箱后的值类型支持的并不好。与 VB 不同,== 这样的基本算术比较符无法在装箱后的类型上得到正确的结果,即使所比较的值属于同一类型。

变量 类型 值 a int 0 b decimal 0.0 c decimal 0.0 boxA boxed int 0 boxB boxed decimal 0.0 boxC boxed decimal 0.0 dynA dynamic holding an int 0 dynB dynamic holding a decimal 0.0 dynC dynamic holding a decimal 0.0 比较 C# VB a==b true true b==a true true b==c true true a.Equals(b) false <-- b.Equals© true <-- boxA == boxB false true boxB == boxA false true boxB == boxC false true boxA.Equals(boxB) false <-- boxB.Equals(boxC) true <-- dynA == dynB true n/a dynB == dynA true n/a dynB == dynC true n/a 从上表可以看出,在 C#3 与之前的版本中,即使两个装箱的值都是 decimal 类型的,得到的也是不相等的结果,但是 Decimal 类的 Equals 方法返回的却是 true。

幸好在 C#4 中可以避免这样的问题。你需要将装箱的值都转换为 dynamic 类型然后再比较,这样即使两个值本来的类型不相同,也可以得到正确的结果。

复制代码
Console.WriteLine((dynamic)boxA == (dynamic)boxB);
2009-06-01 21:412411
用户头像

发布了 63 篇内容, 共 28.1 次阅读, 收获喜欢 1 次。

关注

评论

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

第二周总结

等燕归

OOA-OOD:面向对象分析/设计练习

张荣召

华为:与全球180万云与计算开发者共成长,共创行业新价值

华为云开发者联盟

请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?

orchid9

作业-2020-09-27

芝麻酱

第二周学习框架设计总结

三板斧

极客大学架构师训练营

架构训练营 - 第 2周课后作业 - 学习总结

Pudding

第 2 周 作业

Pyr0man1ac

架构师训练营 Week2 作业 1

lucian

极客大学架构师训练营

架构师训练营第二周心得

CmHuang

graylog日志分析系统上手教程

MySQL从删库到跑路

Apache Linux 运维 日志分析 实时 Web 日志分析器

#第二周作业

vitaminc

金融科技推进数字金融“新基建”,着力建设三种类型数字金融基础设施

CECBC

金融 科技 科技革命

架构师训练营 Week2 作业 2【学习总结】

lucian

极客大学架构师训练营

案例分析--反应式编程框架Flower的设计

张荣召

架构师训练营 - 第 2 周课后作业(1 期)

Pudding

MySQL是如何实现可重复读的?

超超不会飞

MySQL

[架构师训练营第1期]第二周学习总结

猫切切切切切

极客大学架构师训练营

从四个问题透析Linux下C++编译&链接

华为云开发者联盟

c++ Linux 编程

一个草根的日常杂碎(9月26日)

刘新吾

社会百态 生活随想 时评杂谈

面向对象设计原则----接口分离原则(ISP)

张荣召

国内首个区块链村正式落地:数字经济的裂变之路

CECBC

区块链 数字经济

深入理解JVM垃圾回收算法 - 标记整理算法

Skye

标记整理 双指针算法 Lisp2 引线整理算法

Java中的遍历(遍历集合或数组的几种方式)

keaper

Java List 遍历

为什么区块链巨头企业一定会诞生在中国的原因分析

CECBC

区块链 科技

架构师训练营—第二周学习总结

Geek_shu1988

架构师训练营—第二周作业

Geek_shu1988

第二周

等燕归

架构师训练营 1 期 - 第二周总结(vaik)

行之

架构师训练营第二周学习总结

薛凯

第二周课后练习

薛凯

让C#中的0等于0_.NET_Jonathan Allen_InfoQ精选文章