private TType DecodeType(ref BlobReader blobReader, int typeCode) { TType elementType; int index; switch (typeCode) { case (int)SignatureTypeCode.Boolean: case (int)SignatureTypeCode.Char: case (int)SignatureTypeCode.SByte: case (int)SignatureTypeCode.Byte: case (int)SignatureTypeCode.Int16: case (int)SignatureTypeCode.UInt16: case (int)SignatureTypeCode.Int32: case (int)SignatureTypeCode.UInt32: case (int)SignatureTypeCode.Int64: case (int)SignatureTypeCode.UInt64: case (int)SignatureTypeCode.Single: case (int)SignatureTypeCode.Double: case (int)SignatureTypeCode.IntPtr: case (int)SignatureTypeCode.UIntPtr: case (int)SignatureTypeCode.Object: case (int)SignatureTypeCode.String: case (int)SignatureTypeCode.Void: case (int)SignatureTypeCode.TypedReference: return(_provider.GetPrimitiveType((PrimitiveTypeCode)typeCode)); case (int)SignatureTypeCode.Pointer: elementType = DecodeType(ref blobReader); return(_provider.GetPointerType(elementType)); case (int)SignatureTypeCode.ByReference: elementType = DecodeType(ref blobReader); return(_provider.GetByReferenceType(elementType)); case (int)SignatureTypeCode.Pinned: elementType = DecodeType(ref blobReader); return(_provider.GetPinnedType(elementType)); case (int)SignatureTypeCode.SZArray: elementType = DecodeType(ref blobReader); return(_provider.GetSZArrayType(elementType)); case (int)SignatureTypeCode.FunctionPointer: MethodSignature <TType> methodSignature = DecodeMethodSignature(ref blobReader); return(_provider.GetFunctionPointerType(methodSignature)); case (int)SignatureTypeCode.Array: return(DecodeArrayType(ref blobReader)); case (int)SignatureTypeCode.RequiredModifier: return(DecodeModifiedType(ref blobReader, isRequired: true)); case (int)SignatureTypeCode.OptionalModifier: return(DecodeModifiedType(ref blobReader, isRequired: false)); case (int)SignatureTypeCode.GenericTypeInstance: return(DecodeGenericTypeInstance(ref blobReader)); case (int)SignatureTypeCode.GenericTypeParameter: index = blobReader.ReadCompressedInteger(); return(_provider.GetGenericTypeParameter(index)); case (int)SignatureTypeCode.GenericMethodParameter: index = blobReader.ReadCompressedInteger(); return(_provider.GetGenericMethodParameter(index)); case (int)SignatureTypeHandleCode.Class: case (int)SignatureTypeHandleCode.ValueType: return(DecodeTypeDefOrRef(ref blobReader, (SignatureTypeHandleCode)typeCode)); default: throw new BadImageFormatException(SR.Format(SR.UnexpectedSignatureTypeCode, typeCode)); } }