关于C#相等运算符(==)重载的问题
来源:互联网 发布:中国远征军 知乎 编辑:程序博客网 时间:2024/06/05 00:54
本文参考这位大神的文章
在C#里面,都知道自定义的class是引用类型,是可以为null的,于是出现了以下问题:
遇到需求,需要对自定义class实例比较是否相等,开始 我的代码是这样(测试代码,没什么较大的实际意义)
class CTest{ public int i; static public bool operator==(CTest _1, CTest _2) { return _1.i == _2.i; } public static operator !=(CTest _1, CTest _2) { return !(_1 == _2); }}
但是当出现这样的代码时,就会出问题(在Unity中报空引用的错误):
CTest instance;if(instance == null){ // ......}else{ // ......}
经过调试发现,是因为instance为null,于是调用重载的相等运算符时产生了异常。一时之间想不到比较好的解决方法,后来在网上查到开头的文章,于是将代码改成这样,就成功了:
class CTest { public int i; static public bool operator == (CTest _1, CTest _2) {// if (_1.Equals(_2))// return true; bool _1_null = (_1 as object) == null; bool _2_null = (_2 as object) == null; if (_1_null && _2_null) return true; if ((_1_null && !_2_null) || (_2_null && !_1_null)) return false; return _1.i == _2.i; } static public bool operator !=(CTest _1, CTest _2) { return !(_1 == _2); } }
在进入相等运算符的函数时,首先判断参数是否为空,而该项判断也会调用相等运算符,所以暂时把参数转化为object,调用object的相等运算符判断是否为空,然后,在进行自己需要的判断
0 0
- 关于C#相等运算符(==)重载的问题
- C#相等运算符重载的陷阱和解决办法
- 关于 C# 自增运算符(operator ++)的重载
- 关于运算符重载的问题
- 关于=运算符重载
- 字符串的运算符重载(如:赋值‘=’、加'+'、加等'+='、下标'[]'相等'=='、不等'!='、大于'>'、输出运算符'<<'以及类型转换)
- C#中关于运算符重载的例子
- 重载运算符 == C#
- c#运算符的重载
- C#运算符的重载
- C# ++运算符的重载
- C#运算符的重载
- C#运算符的重载
- 关于C++重载赋值运算符"="的讨论
- 关于运算符的重载
- 十九、运算符重载(三)String类的改进实现、[]运算符重载、+运算符重载、+=运算符重载、<<运算符重载、>>运算符重载
- C++中关于重载后置++运算符的问题
- 关于stl优先队列重载小于运算符的问题
- Resharper如何启用原VS的智能提示
- javascript-第八节-DOM对象实例集合
- post 和 get 的区别
- FPGA 130例-->例5.16 to 例8.5
- Linux下python升级至2.7步骤
- 关于C#相等运算符(==)重载的问题
- 接口的注意事项
- <<Effective C++>>读书笔记8: 定制new和delete
- javascript-第九节-键值或按钮控制div移动、轮播
- DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016错误解决方法
- javascript--第九节-爱奇艺网站首页(轮播图)
- Google免费DNS服务器IP及全国主要DNS
- ListView适配不同item范例
- CentOS x64上Matlab R2015b的镜像安装方法与卸载