Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GetValue()

static unsafe object System.Reflection.MdConstant.GetValue ( MetadataImport scope,
int token,
RuntimeTypeHandle fieldTypeHandle,
bool raw )
inlinestatic

Definition at line 5 of file MdConstant.cs.

6 {
7 long value;
8 int length;
9 CorElementType corElementType;
10 string defaultValue = scope.GetDefaultValue(token, out value, out length, out corElementType);
11 RuntimeType runtimeType = fieldTypeHandle.GetRuntimeType();
12 if (runtimeType.IsEnum && !raw)
13 {
14 long num = 0L;
15 switch (corElementType)
16 {
17 case CorElementType.ELEMENT_TYPE_VOID:
18 return DBNull.Value;
19 case CorElementType.ELEMENT_TYPE_CHAR:
20 num = *(ushort*)(&value);
21 break;
22 case CorElementType.ELEMENT_TYPE_I1:
23 num = *(sbyte*)(&value);
24 break;
25 case CorElementType.ELEMENT_TYPE_U1:
26 num = *(byte*)(&value);
27 break;
28 case CorElementType.ELEMENT_TYPE_I2:
29 num = *(short*)(&value);
30 break;
31 case CorElementType.ELEMENT_TYPE_U2:
32 num = *(ushort*)(&value);
33 break;
34 case CorElementType.ELEMENT_TYPE_I4:
35 num = *(int*)(&value);
36 break;
37 case CorElementType.ELEMENT_TYPE_U4:
38 num = (uint)(*(int*)(&value));
39 break;
40 case CorElementType.ELEMENT_TYPE_I8:
41 num = value;
42 break;
43 case CorElementType.ELEMENT_TYPE_U8:
44 num = value;
45 break;
46 case CorElementType.ELEMENT_TYPE_CLASS:
47 return null;
48 default:
49 throw new FormatException(SR.Arg_BadLiteralFormat);
50 }
51 return RuntimeType.CreateEnum(runtimeType, num);
52 }
53 if (runtimeType == typeof(DateTime))
54 {
55 long num2 = 0L;
56 switch (corElementType)
57 {
58 case CorElementType.ELEMENT_TYPE_VOID:
59 return DBNull.Value;
60 case CorElementType.ELEMENT_TYPE_I8:
61 num2 = value;
62 break;
63 case CorElementType.ELEMENT_TYPE_U8:
64 num2 = value;
65 break;
66 case CorElementType.ELEMENT_TYPE_CLASS:
67 return null;
68 default:
69 throw new FormatException(SR.Arg_BadLiteralFormat);
70 }
71 return new DateTime(num2);
72 }
73 return corElementType switch
74 {
75 CorElementType.ELEMENT_TYPE_VOID => DBNull.Value,
76 CorElementType.ELEMENT_TYPE_CHAR => *(char*)(&value),
77 CorElementType.ELEMENT_TYPE_I1 => *(sbyte*)(&value),
78 CorElementType.ELEMENT_TYPE_U1 => *(byte*)(&value),
79 CorElementType.ELEMENT_TYPE_I2 => *(short*)(&value),
80 CorElementType.ELEMENT_TYPE_U2 => *(ushort*)(&value),
81 CorElementType.ELEMENT_TYPE_I4 => *(int*)(&value),
82 CorElementType.ELEMENT_TYPE_U4 => *(uint*)(&value),
83 CorElementType.ELEMENT_TYPE_I8 => value,
84 CorElementType.ELEMENT_TYPE_U8 => (ulong)value,
85 CorElementType.ELEMENT_TYPE_BOOLEAN => *(int*)(&value) != 0,
86 CorElementType.ELEMENT_TYPE_R4 => *(float*)(&value),
87 CorElementType.ELEMENT_TYPE_R8 => *(double*)(&value),
88 CorElementType.ELEMENT_TYPE_STRING => defaultValue ?? string.Empty,
89 CorElementType.ELEMENT_TYPE_CLASS => null,
90 _ => throw new FormatException(SR.Arg_BadLiteralFormat),
91 };
92 }

References System.SR.Arg_BadLiteralFormat, System.RuntimeType.CreateEnum(), System.DateTime, System.Reflection.MetadataImport.GetDefaultValue(), System.RuntimeTypeHandle.GetRuntimeType(), System.Type.IsEnum, System.L, System.length, System.DBNull.Value, and System.value.

Referenced by System.Reflection.RuntimePropertyInfo.GetConstantValue(), System.Reflection.RuntimeParameterInfo.GetDefaultValueInternal(), and System.Reflection.MdFieldInfo.GetValue().