134 {
135 if (targetType.IsEnum)
136 {
137
139 {
140 object[] arr = (object[])obj;
141 object value = null;
142 for (int i = 1; i < arr.Length; i++)
143 {
144
145 string s = ((object[])arr[i])[2].ToString();
146 object newval = LookupEnumValue(loader.Context, targetType, s);
147 if (value == null)
148 {
149 value = newval;
150 }
151 else
152 {
153 value = EnumHelper.OrBoxedIntegrals(loader.Context, value, newval);
154 }
155 }
156 return value;
157 }
158 else
159 {
160 string s = ((object[])obj)[2].ToString();
161 if (s == "__unspecified")
162 {
163
164 }
165 return LookupEnumValue(loader.Context, targetType, s);
166 }
167 }
168 else if (targetType == loader.Context.Types.Type)
169 {
170
171 return loader.FieldTypeWrapperFromSig(((
string)((
object[])obj)[1]).Replace(
'/',
'.'),
LoadMode.LoadOrThrow).TypeAsTBD;
172 }
173 else if (targetType.IsArray)
174 {
175
176 object[] arr = (object[])obj;
177 Type elementType = targetType.GetElementType();
178 object[] targetArray = new object[arr.Length - 1];
179 for (int i = 1; i < arr.Length; i++)
180 {
181 targetArray[i - 1] =
ConvertValue(loader, elementType, arr[i]);
182 }
183 return targetArray;
184 }
185 else
186 {
187 return obj;
188 }
189 }
IKVM.Reflection.Type Type
static object ConvertValue(RuntimeClassLoader loader, Type targetType, object obj)