写点什么

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

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

关注

评论

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

使用OpenTelemetry进行监控

快乐非自愿限量之名

.net 优化 开发语言 项目开发

云手机海外社交媒体监测:洞悉舆论,把握商机

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机

德国 building IoT 2024 峰会:天谋科技围绕 IoTDB 的时序数据管理解决方案前沿探索

Apache IoTDB

2023,九章云极DataCanvas的澎湃时刻

九章云极DataCanvas

九章云极DataCanvas公司牵手国家超算互联网,实现算法与算力一体化服务

九章云极DataCanvas

聊一聊日常开发中如何优雅的避免那无处不在的空指针异常

快乐非自愿限量之名

指针 软件开发

大模型基础应用框架(ReACT\SFT\RAG)创新及零售业务落地

京东零售技术

人工智能 算法 大模型 agent ChatGPT

阿里巴巴1688商品详情API:如何高效地获取商品信息?

技术冰糖葫芦

API 接口

九章云极DataCanvas公司出席WBBA 2024宽带发展大会

九章云极DataCanvas

融云 IM 史无前例五折优惠!

融云 RongCloud

壹陆锋芒,韧性成长 | 博睿数据16周年庆典圆满落幕!

博睿数据

基于高德地图的电子围栏、地图搜索嵌入

五陵散人

地图 高德地图 电子围栏

电商卖家如何利用API提升客户满意度

技术冰糖葫芦

API 接口

一分钟了解体育直播平台盈利模式

软件开发-梦幻运营部

HarmonyOS UI 开发

EquatorCoco

UI HarmonyOS 设计开发

AIGC下一步:如何用AI再度重构或优化媒体处理?

不在线第一只蜗牛

视频 媒体服务 AIGC 人工智你

企业架构设计原则之理念领先性

凌晞

架构设计原则

一文读懂Penpad 以 Fair Launch 方式推出的首个资产 PEN

大瞿科技

万字长文讲解关于LowCode你需要知道的一切

canonical

DDD 低代码 软件架构 可逆计算 Nop平台

一文读懂Penpad 以 Fair Launch 方式推出的首个资产 PEN

加密眼界

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