C#中相等运算符重载可能造成的陷阱解析
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍"C#中相等运算符重载可能造成的陷阱解析",在日常操作中,相信很多人在C#中相等运算符重载可能造成的陷阱解析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2025年02月02日C#中相等运算符重载可能造成的陷阱解析
这篇文章主要介绍"C#中相等运算符重载可能造成的陷阱解析",在日常操作中,相信很多人在C#中相等运算符重载可能造成的陷阱解析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C#中相等运算符重载可能造成的陷阱解析"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
最近编程时遇到一个相等运算符重载的问题,想来该是C#的一个陷阱。
我定义的Coordinate类原先是这样重载相等运算符的:
publice class Coordinates { .... public override bool Equals(object obj) { if (!(obj is Coordinates)) return false; Coordinates other = (Coordinates)obj; return (this.longitude.CompareTo(other.longitude) == 0) && (this.latitude.CompareTo(other.latitude) == 0); } public static bool operator ==(Coordinates lhs, Coordinates rhs) { return lhs.Equals(rhs); } public static bool operator !=(Coordinates lhs, Coordinates rhs) { return !(lhs == rhs); } ... }
这也是运算符重载时常见的情况,但在具体使用时有种情况下会出现问题:即当一个Coordinate对象本身为NULL,而它再与NULL比较时,如下所示:
Coordinates actualPos = null; if (actualPos == null) { 。。。 } else { 。。。 }
运行时就会抛出错误,提示说某个指针为空。跟踪的结果发现就是承载的"=="运算符出现问题,它会调用"lhs.Equals(rhs)"语句,结果就是lhs本身不存在导致异常。
为此我试图在调用该语句前排除这种情况,于是把重载函数改为:
public static bool operator ==(Coordinates lhs, Coordinates rhs) { if (lhs == null) return (rhs == null); return lhs.Equals(rhs); }
结果发现这个函数会继续调用自身,随后依然是出现异常。
要解决这个问题,就必须打破这样的死循环,于是尝试着把lhs映射为object,如下所示:
public static bool operator ==(Coordinates lhs, Coordinates rhs) { if ((lhs as object) == null) return ((rhs as object) == null); return lhs.Equals(rhs); }
lhs被映射为object后的"=="就会采用object的相等运算符,结果自然OK。
到此,关于"C#中相等运算符重载可能造成的陷阱解析"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
运算符
运算
陷阱
C#
问题
结果
学习
情况
函数
就是
更多
语句
帮助
实用
有种
为此
接下来
对象
常见
指针
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
江苏互联网智能科技是什么
网络连接到服务器上怎么设置
手机服务器有问题在哪里找
云南公司天人网络技术支持
苏州公司 万户网络技术支持
魔兽服务器显示离线
互联网科技文
惠普服务器阵列设置
msc 材料数据库
软件开发自己创业适合哪种
迪普接入网络安全专家
网络安全轩辕大佬
数据库 慢查询 工具
软件开发 竞争风险
x86服务器怎样部署网站
强化网络安全应急预案
在数据库中S和SC和C什么意思
电脑显示无法打开数据库文件
t6服务器管理器在哪里
博兴销售软件开发公司
江苏互联网智能科技是什么
域成员服务器
数据库技术发展的顺序
数据库还原失败
怎么重启虚拟机的服务器
机架式服务器销售的最多吗
mock 数据库
微信小程序的后台服务器代码
web服务器修改默认访问文件
安徽品质软件开发服务参考价格