| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | using System.Collections;using System.IO;namespace InABox.Core{    public interface IPackableList : IPackable, IList    {    }    public class PackableList<T> : ObservableList<T>, IPackableList where T : BaseObject, IPackable, new()    {        public void Pack(BinaryWriter writer)        {            writer.Write(Count);            foreach (var item in this)                item.Pack(writer);        }        public void Unpack(BinaryReader reader)        {            var iCount = reader.ReadInt32();            for (var i = 0; i < iCount; i++)            {                var item = new T();                item.Unpack(reader);                Add(item);            }        }        public override int GetHashCode()        {            return base.GetHashCode();        }        public override bool Equals(object obj)        {            var other = obj as PackableList<T>;            if (other == null)                return false;            if (Count != other.Count) // Require equal count.                return false;            for (var i = 0; i < Count; i++)            {                var item1 = this[i];                var item2 = other[i];                if (item1 == null)                {                    if (item2 != null)                        return false;                }                else if (!item1.Equals(item2))                {                    return false;                }            }            return true;        }    }}
 |