写点什么

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

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

关注

评论

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

JVM实战—JVM垃圾回收的算法和全流程

不在线第一只蜗牛

Java JVM

TikTok海外直播加速方法有哪些?

Ogcloud

海外直播专线 海外直播 tiktok直播专线 海外直播网络 海外直播IP

从 Nginx 日志到关键数据指标:三剑客实战解析日志分析

测吧(北京)科技有限公司

测试

Linux 性能优化实战:利用三剑客进行进程监控与资源管理

测吧(北京)科技有限公司

测试

MacDroid Pro for mac(安卓手机数据传输助手)2.2激活版

小玖_苹果Mac软件

亲测好用的低代码开发平台

伤感汤姆布利柏

Linux 环境配置全指南:Java、Python、Node.js 和 Android SDK 的高效安装与管理

测吧(北京)科技有限公司

测试

2024京东零售技术最受欢迎的10篇好文

京东零售技术

央视聚焦!揭秘千行百业背后的“算力引擎”!

极客天地

巅峰时刻,「第6届天池全球数据库大赛」圆满收官

新消费日报

Topaz Video AI for mac(人工智能视频增强软件)v4.1.0激活版

小玖_苹果Mac软件

Trapcode Suite for Mac(红巨人粒子特效套装插件)v2024.0.1激活版

小玖_苹果Mac软件

摇滚&amp;黑客演唱会回归 1月11日北京不见不散!

极客天地

sed 流式编辑:Linux 中流畅修改文件内容的最佳实践

测吧(北京)科技有限公司

测试

性能与网络统计:如何用 Linux 三剑客高效统计和优化系统资源

测吧(北京)科技有限公司

测试

进阶命令 curl 与 jq:如何在 Linux 中进行接口请求和 JSON 数据处理

测吧(北京)科技有限公司

测试

大语言模型提示词工程 - ReACT 推理模式

测吧(北京)科技有限公司

测试

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