private object GetCustomAttributeLiteralValue(MemoryCursor/*!*/ sigReader, ref TypeNode/*!*/ type) { if (type == null) return sigReader.ReadInt32(); switch (type.typeCode) { case ElementType.Boolean: return sigReader.ReadBoolean(); case ElementType.Char: return sigReader.ReadChar(); case ElementType.Double: return sigReader.ReadDouble(); case ElementType.Single: return sigReader.ReadSingle(); case ElementType.Int16: return sigReader.ReadInt16(); case ElementType.Int32: return sigReader.ReadInt32(); case ElementType.Int64: return sigReader.ReadInt64(); case ElementType.Int8: return sigReader.ReadSByte(); case ElementType.UInt16: return sigReader.ReadUInt16(); case ElementType.UInt32: return sigReader.ReadUInt32(); case ElementType.UInt64: return sigReader.ReadUInt64(); case ElementType.UInt8: return sigReader.ReadByte(); case ElementType.String: return ReadSerString(sigReader); case ElementType.ValueType: EnumNode etype = GetCustomAttributeEnumNode(ref type); return this.GetCustomAttributeLiteralValue(sigReader, etype.UnderlyingType); case ElementType.Class: return this.GetTypeFromSerializedName(ReadSerString(sigReader)); case ElementType.SzArray: int numElems = sigReader.ReadInt32(); TypeNode elemType = ((ArrayType)type).ElementType; return this.GetCustomAttributeLiteralArray(sigReader, numElems, elemType); case ElementType.Object: { type = this.ParseTypeSignature(sigReader); return this.GetCustomAttributeLiteralValue(sigReader, ref type); } } throw new InvalidMetadataException(ExceptionStrings.UnexpectedTypeInCustomAttribute); }