写点什么

让 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:411923
用户头像

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

关注

评论

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

架构师训练营 Week 03 总结

Wancho

单例模式 & 组合模式

朱月俊

架构师训练营第三章作业

叮叮董董

架构师训练营 No.3 周作业

连增申

第三周作业

王鑫龙

极客大学架构师训练营

03周作业——设计模式

dao

设计模式 极客大学架构师训练营 作业

【第三周】学习总结——Flower框架学习和设计模式

三尾鱼

极客大学架构师训练营

架构师训练营 第三周作业

Glowry

极客大学架构师训练营

投资人李丰对中国商业模式创新的理解

石云升

投资 零售 模式创新

Week3总结+作业

林毋梦

极客大学架构师训练营

【架构师训练营】第三周作业

Mr.hou

极客大学架构师训练营

Week 03 命题作业

卧石漾溪

极客大学架构师训练营

架构师训练营-第三周作业

清风徐徐

八张图彻底了解JDK8 GC调优秘籍-附PDF下载

程序那些事

JVM jdk8 「Java 25周年」 Java 25 周年 性能调优

Week 03 学习总结

卧石漾溪

极客大学架构师训练营

「架构师训练营」第 3 周作业 - 模式与重构

guoguo 👻

极客大学架构师训练营

架构师训练营作业 -20200621

caibird1984

极客大学架构师训练营

架构师训练营第三章总结

叮叮董董

代码重构:如何充实你的设计工具箱

Skye

极客大学架构师训练营 代码重构

代码重构--架构师必备技能

极客李

架构师课程第三周作业

杉松壁

架构训练营第三章课后作业单例模式 组合模式

周冬辉

BIGO全球计算平台的技术挑战

DT极客

谁再悄咪咪的吃掉异常,我上去就是一 JIO

楼下小黑哥

Java dubbo 踩坑经历

Week 03- 作业二:学习总结

dean

极客大学架构师训练营

最近一周总结

朱月俊

分布式时序数据库SilverDB-技术架构1

Hervor。

时序数据库 分布式架构 分布式存储

Zookeeper面试题36问,再和面试官多聊半个点

Java小咖秀

zookeeper 负载均衡 面试 分布式协同 分布式系统

Java HashMap loadfactor没有必要非是0.75

i风语

Java redis hashmap loadfactor hash

改变要一点点来

Neco.W

正确阅读 进步

第三周作业

CP

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