public ICollection <TValue> ReadCollection <TValue>()
        {
            var token = ReadUInt64();

            object value;

            if (readCache.TryGetValue(token, out value))
            {
                return((ICollection <TValue>)value);
            }

            var type       = ReadType();
            var collection = (ICollection <TValue>)Activator.CreateInstance(type);

            readCache.Add(token, collection);
            var reader     = new Deserializer(this);
            var readMethod = ReadMethods <TValue> .Get();

            for (int i = 0; i < reader.WriteCount; i++)
            {
                collection.Add(readMethod(reader));
            }

            return(collection);
        }
 public TValue ReadEnum <TValue>()
 {
     return(ReadMethods <TValue> .Get()(this));
 }