private Object GetObject_V2()

in ILRepack/ResReader.cs [361:442]


        private Object GetObject_V2(Res res)
        {
            lock (this)
            {
                _store.BaseStream.Seek(_dataSectionOffset + res.dataPos, SeekOrigin.Begin);
                ResourceTypeCode typeCode = (ResourceTypeCode)Read7BitEncodedInt();

                switch (typeCode)
                {
                    case ResourceTypeCode.Null:
                        return null;

                    case ResourceTypeCode.String:
                        return _store.ReadString();

                    case ResourceTypeCode.Boolean:
                        return _store.ReadBoolean();

                    case ResourceTypeCode.Char:
                        return (char)_store.ReadUInt16();

                    case ResourceTypeCode.Byte:
                        return _store.ReadByte();

                    case ResourceTypeCode.SByte:
                        return _store.ReadSByte();

                    case ResourceTypeCode.Int16:
                        return _store.ReadInt16();

                    case ResourceTypeCode.UInt16:
                        return _store.ReadUInt16();

                    case ResourceTypeCode.Int32:
                        return _store.ReadInt32();

                    case ResourceTypeCode.UInt32:
                        return _store.ReadUInt32();

                    case ResourceTypeCode.Int64:
                        return _store.ReadInt64();

                    case ResourceTypeCode.UInt64:
                        return _store.ReadUInt64();

                    case ResourceTypeCode.Single:
                        return _store.ReadSingle();

                    case ResourceTypeCode.Double:
                        return _store.ReadDouble();

                    case ResourceTypeCode.Decimal:
                        return _store.ReadDecimal();

                    case ResourceTypeCode.DateTime:
                        // Use DateTime's ToBinary & FromBinary.
                        Int64 data = _store.ReadInt64();
                        return DateTime.FromBinary(data);

                    case ResourceTypeCode.TimeSpan:
                        Int64 ticks = _store.ReadInt64();
                        return new TimeSpan(ticks);

                    // Special types
                    case ResourceTypeCode.ByteArray:
                        {
                            int len = _store.ReadInt32();
                            return _store.ReadBytes(len);
                        }
                    case ResourceTypeCode.Stream:
                        {
                            int len = _store.ReadInt32();
                            byte[] bytes = _store.ReadBytes(len);
                            // Lifetime of memory == lifetime of this stream.
                            return new MemoryStream(bytes);
                        }
                }

                // Normal serialized objects
                return _bf.Deserialize(_store.BaseStream);
            }
        }