写点什么

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

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

关注

评论

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

飞桨国际化应用案例:挪威广告企业Adevinta应用PaddleOCR提质增效

飞桨PaddlePaddle

广告 OCR 飞桨 飞桨PaddlePaddle

BES 在大规模向量数据库场景的探索和实践

Baidu AICLOUD

elasticsearch 向量检索 大模型

Transformer与预训练语言模型的探索

百度开发者中心

人工智能 大模型 LLM

设计模式-单例模式概述 | 京东云技术团队

京东科技开发者

设计模式 单例模式 结构型模式 创建型模型 企业号11月PK榜

无需数据搬迁,10倍性能提升!携程的统一分析之旅

StarRocks

数据库 StarRocks

【行云流水线实践】基于“OneBuild”方法对镜像进行快速装箱 | 京东云技术团队

京东科技开发者

云原生 CI/CD Docker 镜像 企业号11月PK榜

等你加入!文心开发者说分享者招募全面开启

飞桨PaddlePaddle

开发者 文心 文心开发者说

钱包开发:区块链钱包热钱包​加密货币开发公司集成服务

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 NFT开发

利用LLM大模型和智能问答BI实现智能报表生成

百度开发者中心

人工智能 数据可视化 大模型 LLM

SaaS 出海,如何搭建国际化服务体系?(三)

LigaAI

SaaS 远程会议 高效协作 出海企业 SaaS 增长

一文带你了解什么是“三渲二”?

Finovy Cloud

3D 建模 影视动漫

API管理平台搭建过程问题总结

谷云科技RestCloud

API ipaas API 安全

大模型训练中Loss出现NaN的解决策略

百度开发者中心

大模型训练 大模型 LLM

大模型在金融监管科技中的应用价值

百度开发者中心

人工智能 大模型 LLM模型

Generative AI 新世界 | 文生图(Text-to-Image)领域论文解读

亚马逊云科技 (Amazon Web Services)

机器学习 生成式人工智能 大语言模型

开发第一个flutter应用时需要注意什么

Onegun

flutter 前端框架

生产管理MES系统的功能和作用/开源MES

万界星空科技

数字化转型 生产管理系统 mes #开源 开源mes

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