Beispiel #1
0
        private static Value GetLiteralValue(DebugFieldInfo fieldInfo)
        {
            CorElementType corElemType = (CorElementType)fieldInfo.FieldProps.ConstantType;

            if (corElemType == CorElementType.CLASS)
            {
                // Only null literals are allowed
                return(Eval.CreateValue(fieldInfo.AppDomain, null));
            }
            else if (corElemType == CorElementType.STRING)
            {
                string str = Marshal.PtrToStringUni(fieldInfo.FieldProps.ConstantPtr, (int)fieldInfo.FieldProps.ConstantStringLength);
                return(Eval.CreateValue(fieldInfo.AppDomain, str));
            }
            else
            {
                DebugType type = DebugType.CreateFromType(fieldInfo.AppDomain.Mscorlib, DebugType.CorElementTypeToManagedType(corElemType));
                if (fieldInfo.FieldType.IsEnum && fieldInfo.FieldType.GetEnumUnderlyingType() == type)
                {
                    Value val          = Eval.NewObjectNoConstructor((DebugType)fieldInfo.FieldType);
                    Value backingField = val.GetMemberValue("value__");
                    backingField.CorGenericValue.SetValue(fieldInfo.FieldProps.ConstantPtr);
                    return(val);
                }
                else
                {
                    Value val = Eval.NewObjectNoConstructor(type);
                    val.CorGenericValue.SetValue(fieldInfo.FieldProps.ConstantPtr);
                    return(val);
                }
            }
        }