最近编码的过程中,使用了对象本地内存缓存,缓存用了Dictionary<string,object>,ConcurrentDictionary<string,oject>,还可以是MemoryCache(底层基于Hashtable)。使用缓存,肯定要处理数据变化缓存同步的问题。如何比较数据的变化,演进为新的内存对象数据和已有内存对象数据的相等性比较!
对象的Equals相等性比较,百度、google会有一大堆实现,几个重点的点:
1. 实现接口IEquatable<T>
https://msdn.microsoft.com/en-us/library/ms131190(v=vs.110).aspx
2.重写bool Equals(object other)方法和 int GetHashCode()方法
http://stackoverflow.com/questions/2734914/whats-the-difference-between-iequatable-and-just-overriding-object-equals
1 /// <summary> 2 /// 流控事件 3 </summary> 4 [Serializable] 5 public class FlowControlEvent: IEquatable<FlowControlEvent> 6 { 7 static readonly string Global = "Global"; 8 9 10 标识 11 12 string ID { get; set; } 13 14 15 流控策略名称 16 17 string StrategyName { 18 19 20 是否手工触发 21 22 bool IsManuelTrigger { 23 24 25 触发时间 26 27 public DateTime TriggerTime { ; } 28 29 30 流控策略 31 32 public FlowControlStrategy Strategy { 33 34 35 持续时间,单位s 36 37 long Duration { 38 39 //是否启用 40 private bool isEnable = true 41 42 43 是否启用 44 45 bool IsEnable 46 { 47 get 48 { 49 return isEnable; 50 } 51 set 52 53 isEnable = value; 54 55 } 56 57 58 是否使用中 59 60 IsUsing 61 62 63 64 if (IsEnable == false) return false 65 if (IsManuelTrigger) 66 { 67 if (Duration == long.MaxValue) 68 { 69 70 } 71 else 72 73 var span = DateTime.Now - TriggerTime; 74 if (span.TotalSeconds > Duration) 75 76 77 78 79 } 80 81 82 83 84 85 86 87 88 创建时间 89 90 public DateTime CreateTime { 91 92 93 创建人 94 95 string Creator { 96 97 98 最后修改时间 99 100 public DateTime LastModifyTime { 101 102 103 最后修改人 104 105 string LastModifier { 106 107 108 相等性比较 109 110 <param name="other">要比较的对象</param> 111 <returns>true 相等 false 不相等</returns> 112 override bool Equals(object other) 113 114 if (ReferenceEquals(null,other)) 115 this,1)">116 if (other.GetType() != this.GetType()) 117 118 Equals((FlowControlEvent)other); 119 120 121 122 流控事件是否等于同一类型的另一个流控事件 123 124 同一类型的另一个流控事件125 126 Equals(FlowControlEvent other) 127 128 if (other == null) 129 130 if (!string.Equals(this.ID,other.ID) || this.IsEnable != other.IsEnable || this.Duration!= other.Duration 131 || !this.StrategyName,other.StrategyName)||this.TriggerTime!= other.TriggerTime) 132 133 134 135 136 137 138 重载GetHashCode方法 139 140 HashCode141 int GetHashCode() 142 143 unchecked 144 145 var result = 0146 result = (result * 397) ^ ID.GetHashCode(); 147 result = (result * IsEnable.GetHashCode(); 148 result = (result * Duration.GetHashCode(); 149 result = (result * StrategyName.GetHashCode(); 150 result = (result * TriggerTime.GetHashCode(); 151 result; 152 153 154 }
周国庆
2017/4/25
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。