对象Equals相等性比较的通用实现
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,最近编码的过程中,使用了对象本地内存缓存,缓存用了Dictionary, ConcurrentDictionary,还可以是MemoryCache(底层基于Hashtable)。使用缓存,肯定要处理数
千家信息网最后更新 2025年11月10日对象Equals相等性比较的通用实现
最近编码的过程中,使用了对象本地内存缓存,缓存用了Dictionary
对象的Equals相等性比较,百度、google会有一大堆实现,几个重点的点:
1. 实现接口IEquatable
htt p s : / / ms d n . mi c r o s o f t . c o m /en-us/library/ms131190(v=vs.110).aspx
2.重写bool Equals(object other)方法和 int GetHashCode()方法
htt p : / / s ta ck o v e r f l o w . co m / q u es t i o n s /2 7 3 49 1 4/whats-the-difference-between-iequatable-and-just-overriding-object-equals
这里直接贴出来一个通用实现,分享给大家:
1 ///2 /// 流控事件 3 /// 4 [Serializable] 5 public class FlowControlEvent: IEquatable6 { 7 public static readonly string Global = "Global"; 8 9 /// 10 /// 标识 11 /// 12 public string ID { get; set; } 13 14 ///15 /// 流控策略名称 16 /// 17 public string StrategyName { get; set; } 18 19 ///20 /// 是否手工触发 21 /// 22 public bool IsManuelTrigger { get; set; } 23 24 ///25 /// 触发时间 26 /// 27 public DateTime TriggerTime { get; set; } 28 29 ///30 /// 流控策略 31 /// 32 public FlowControlStrategy Strategy { get; set; } 33 34 ///35 /// 持续时间,单位s 36 /// 37 public long Duration { get; set; } 38 39 //是否启用 40 private bool isEnable = true; 41 42 ///43 /// 是否启用 44 /// 45 public bool IsEnable 46 { 47 get 48 { 49 return isEnable; 50 } 51 set 52 { 53 isEnable = value; 54 } 55 } 56 57 ///58 /// 是否使用中 59 /// 60 public bool IsUsing 61 { 62 get 63 { 64 if (IsEnable == false) return false; 65 if (IsManuelTrigger) 66 { 67 if (Duration == long.MaxValue) 68 { 69 return true; 70 } 71 else 72 { 73 var span = DateTime.Now - TriggerTime; 74 if (span.TotalSeconds > Duration) 75 return false; 76 else 77 return true; 78 } 79 } 80 else 81 { 82 return true; 83 } 84 } 85 } 86 87 ///88 /// 创建时间 89 /// 90 public DateTime CreateTime { get; set; } 91 92 ///93 /// 创建人 94 /// 95 public string Creator { get; set; } 96 97 ///98 /// 最后修改时间 99 /// 100 public DateTime LastModifyTime { get; set; }101 102 ///103 /// 最后修改人104 /// 105 public string LastModifier { get; set; }106 107 ///108 /// 相等性比较109 /// 110 /// 要比较的对象111 ///true 相等 false 不相等 112 public override bool Equals(object other)113 {114 if (ReferenceEquals(null, other)) return false;115 if (ReferenceEquals(this, other)) return true;116 if (other.GetType() != this.GetType()) return false;117 118 return Equals((FlowControlEvent)other);119 }120 121 ///122 /// 流控事件是否等于同一类型的另一个流控事件123 /// 124 /// 同一类型的另一个流控事件125 ///true 相等 false 不相等 126 public bool Equals(FlowControlEvent other)127 {128 if (other == null)129 return false;130 if (!string.Equals(this.ID , other.ID) || this.IsEnable != other.IsEnable || this.Duration!= other.Duration131 || !string.Equals(this.StrategyName, other.StrategyName)||this.TriggerTime!= other.TriggerTime)132 return false;133 134 return true;135 }136 137 ///138 /// 重载GetHashCode方法139 /// 140 ///HashCode 141 public override int GetHashCode()142 {143 unchecked144 {145 var result = 0;146 result = (result * 397) ^ ID.GetHashCode();147 result = (result * 397) ^ IsEnable.GetHashCode();148 result = (result * 397) ^ Duration.GetHashCode();149 result = (result * 397) ^ StrategyName.GetHashCode();150 result = (result * 397) ^ TriggerTime.GetHashCode();151 return result;152 }153 }154 }
对象
事件
数据
时间
缓存
内存
方法
策略
类型
变化
创建人
单位
名称
大堆
底层
手工
接口
标识
编码
过程
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
希望之村服务器更新公告
互联网科技知识与技术
服务器无线网卡
怎么修改sql r2数据库密码
数据库的试题
软件开发指的是APP吗
网络安全指南2018
启东无忧网络技术诚信经营
如何评价百度云服务器
非结构化数据库技术
广州直播软件开发公司哪个好
软件开发企业小规模纳税人
数据库规范化设计要求有哪些
国外租用服务器
公安厅 网络安全培训
唐山廊坊oa网络技术
数据库mc和hd
怎么压缩sql数据库
简述网络技术对教育的影响
长安区委网络安全
构建数据库时忘了设id
网络安全法网络安全工作小组
2020年全国网络安全大会
提升服务器安全性有什么作用
天津服务器企业排名
微信软件开发协议书范本
福山软件开发哪家好
a股数据库安全
国家网络安全宣传周之个人数据
浙江软件开发加盟商活动方案