public override bool Equals(object obj) { serizlizedObj other = obj as serizlizedObj; if (other == null) { return(false); } return(ReferenceEquals(other.obj, this.obj)); }
public void SerializeObject <T>(System.IO.BinaryWriter writer, T obj) where T : ISWCSerializable { if (obj == null) { WriteTag(writer, TagType.NULLINSTANCE); return; } if (!(obj is RunTimeValueBase)) { //foreach (var item in serizlizedObjects) //{ // //如果有完全相同的对象 // if (ReferenceEquals(item.Value, obj)) // { // WriteTag(writer, TagType.INSTANCEATCACHE); // writer.Write(item.Key); // return; // } //} serizlizedObj test = new serizlizedObj(); test.obj = obj; if (dictSerizlized.ContainsKey(test)) { int key = dictSerizlized[test]; WriteTag(writer, TagType.INSTANCEATCACHE); writer.Write(key); return; } } { WriteTag(writer, TagType.WRITEINSTANCEANDCACHEIT); writer.Write(serizlizedObjects.Count); int key = serizlizedObjects.Count; serizlizedObjects.Add(serizlizedObjects.Count, obj); if (!(obj is RunTimeValueBase)) { serizlizedObj serizlizedObj = new serizlizedObj(); serizlizedObj.obj = obj; dictSerizlized.Add(serizlizedObj, key); } obj.Serialize(writer, this); } }