static public DebugType Create(Process process, ICorDebugClass corClass, params ICorDebugType[] typeArguments) { MetaData metaData = process.GetModule(corClass.Module).MetaData; bool isValueType = false; uint superClassToken = metaData.GetTypeDefProps(corClass.Token).SuperClassToken; if ((superClassToken & 0xFF000000) == 0x02000000) // TypeDef { if (metaData.GetTypeDefProps(superClassToken).Name == "System.ValueType") { isValueType = true; } } if ((superClassToken & 0xFF000000) == 0x01000000) // TypeRef { if (metaData.GetTypeRefProps(superClassToken).Name == "System.ValueType") { isValueType = true; } } int getArgsCount = metaData.GetGenericParamCount(corClass.Token); Array.Resize(ref typeArguments, getArgsCount); ICorDebugType corType = corClass.CastTo <ICorDebugClass2>().GetParameterizedType( isValueType ? (uint)CorElementType.VALUETYPE : (uint)CorElementType.CLASS, typeArguments ); return(Create(process, corType)); }
static public DebugType Create(Process process, ICorDebugClass corClass, params ICorDebugType[] typeArguments) { MetaData metaData = process.GetModule(corClass.Module).MetaData; bool isValueType = false; uint superClassToken = metaData.GetTypeDefProps(corClass.Token).SuperClassToken; if ((superClassToken & 0xFF000000) == 0x02000000) { // TypeDef if (metaData.GetTypeDefProps(superClassToken).Name == "System.ValueType") { isValueType = true; } } if ((superClassToken & 0xFF000000) == 0x01000000) { // TypeRef if (metaData.GetTypeRefProps(superClassToken).Name == "System.ValueType") { isValueType = true; } } int getArgsCount = metaData.GetGenericParamCount(corClass.Token); Array.Resize(ref typeArguments, getArgsCount); ICorDebugType corType = corClass.CastTo<ICorDebugClass2>().GetParameterizedType( isValueType ? (uint)CorElementType.VALUETYPE : (uint)CorElementType.CLASS, typeArguments ); return Create(process, corType); }