Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DefaultValueAttribute.cs
Go to the documentation of this file.
5
7
8[AttributeUsage(AttributeTargets.All)]
10{
11 private object _value;
12
13 private static object s_convertFromInvariantString;
14
15 public virtual object? Value => _value;
16
17 [RequiresUnreferencedCode("Generic TypeConverters may require the generic types to be annotated. For example, NullableConverter requires the underlying type to be DynamicallyAccessedMembers All.")]
18 public DefaultValueAttribute([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, string? value)
19 {
20 if (type == null)
21 {
22 return;
23 }
24 try
25 {
26 if (TryConvertFromInvariantString(type, value, out var conversionResult2))
27 {
28 _value = conversionResult2;
29 }
30 else if (type.IsSubclassOf(typeof(Enum)) && value != null)
31 {
32 _value = Enum.Parse(type, value, ignoreCase: true);
33 }
34 else if (type == typeof(TimeSpan) && value != null)
35 {
37 }
38 else
39 {
41 }
42 [RequiresUnreferencedCode("Generic TypeConverters may require the generic types to be annotated. For example, NullableConverter requires the underlying type to be DynamicallyAccessedMembers All.")]
43 static bool TryConvertFromInvariantString([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type typeToConvert, string stringValue, out object conversionResult)
44 {
45 conversionResult = null;
47 {
48 MethodInfo methodInfo = Type.GetType("System.ComponentModel.TypeDescriptor, System.ComponentModel.TypeConverter", throwOnError: false)?.GetMethod("ConvertFromInvariantString", BindingFlags.Static | BindingFlags.NonPublic);
49 Volatile.Write(ref s_convertFromInvariantString, (methodInfo == null) ? new object() : methodInfo.CreateDelegate(typeof(Func<Type, string, object>)));
50 }
51 if (!(s_convertFromInvariantString is Func<Type, string, object> func))
52 {
53 return false;
54 }
55 try
56 {
57 conversionResult = func(typeToConvert, stringValue);
58 }
59 catch
60 {
61 return false;
62 }
63 return true;
64 }
65 }
66 catch
67 {
68 }
69 }
70
72 {
73 _value = value;
74 }
75
77 {
78 _value = value;
79 }
80
82 {
83 _value = value;
84 }
85
87 {
88 _value = value;
89 }
90
92 {
93 _value = value;
94 }
95
97 {
98 _value = value;
99 }
100
102 {
103 _value = value;
104 }
105
107 {
108 _value = value;
109 }
110
112 {
113 _value = value;
114 }
115
117 {
118 _value = value;
119 }
120
121 [CLSCompliant(false)]
123 {
124 _value = value;
125 }
126
127 [CLSCompliant(false)]
129 {
130 _value = value;
131 }
132
133 [CLSCompliant(false)]
135 {
136 _value = value;
137 }
138
139 [CLSCompliant(false)]
141 {
142 _value = value;
143 }
144
145 public override bool Equals([NotNullWhen(true)] object? obj)
146 {
147 if (obj == this)
148 {
149 return true;
150 }
151 if (!(obj is DefaultValueAttribute defaultValueAttribute))
152 {
153 return false;
154 }
155 if (Value == null)
156 {
157 return defaultValueAttribute.Value == null;
158 }
159 return Value.Equals(defaultValueAttribute.Value);
160 }
161
162 public override int GetHashCode()
163 {
164 return base.GetHashCode();
165 }
166
167 protected void SetValue(object? value)
168 {
169 _value = value;
170 }
171}
override bool Equals([NotNullWhen(true)] object? obj)
DefaultValueAttribute([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, string? value)
static ? object ChangeType(object? value, TypeCode typeCode)
Definition Convert.cs:229
static object Parse(Type enumType, string value)
Definition Enum.cs:368
static CultureInfo InvariantCulture
virtual Delegate CreateDelegate(Type delegateType)
Definition MethodInfo.cs:48
static void Write(ref bool location, bool value)
Definition Volatile.cs:74
static ? Type GetType(string typeName, bool throwOnError, bool ignoreCase)
Definition Type.cs:408
static TimeSpan Parse(string s)
Definition TimeSpan.cs:301