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

◆ EmitValue()

static void System.Reflection.Emit.CustomAttributeBuilder.EmitValue ( BinaryWriter writer,
Type type,
object value )
inlinestaticprivate

Definition at line 310 of file CustomAttributeBuilder.cs.

311 {
312 if (type.IsEnum)
313 {
314 switch (Type.GetTypeCode(Enum.GetUnderlyingType(type)))
315 {
316 case TypeCode.SByte:
317 writer.Write((sbyte)value);
318 break;
319 case TypeCode.Byte:
320 writer.Write((byte)value);
321 break;
322 case TypeCode.Int16:
323 writer.Write((short)value);
324 break;
325 case TypeCode.UInt16:
326 writer.Write((ushort)value);
327 break;
328 case TypeCode.Int32:
329 writer.Write((int)value);
330 break;
331 case TypeCode.UInt32:
332 writer.Write((uint)value);
333 break;
334 case TypeCode.Int64:
335 writer.Write((long)value);
336 break;
337 case TypeCode.UInt64:
338 writer.Write((ulong)value);
339 break;
340 }
341 return;
342 }
343 if (type == typeof(string))
344 {
345 if (value == null)
346 {
347 writer.Write(byte.MaxValue);
348 }
349 else
350 {
351 EmitString(writer, (string)value);
352 }
353 return;
354 }
355 if (type == typeof(Type))
356 {
357 if (value == null)
358 {
359 writer.Write(byte.MaxValue);
360 return;
361 }
362 string text = TypeNameBuilder.ToString((Type)value, TypeNameBuilder.Format.AssemblyQualifiedName);
363 if (text == null)
364 {
365 throw new ArgumentException(SR.Format(SR.Argument_InvalidTypeForCA, value.GetType()));
366 }
368 return;
369 }
370 if (type.IsArray)
371 {
372 if (value == null)
373 {
374 writer.Write(uint.MaxValue);
375 return;
376 }
378 Type elementType = type.GetElementType();
379 writer.Write(array.Length);
380 for (int i = 0; i < array.Length; i++)
381 {
382 EmitValue(writer, elementType, array.GetValue(i));
383 }
384 return;
385 }
386 if (type.IsPrimitive)
387 {
388 switch (Type.GetTypeCode(type))
389 {
390 case TypeCode.SByte:
391 writer.Write((sbyte)value);
392 break;
393 case TypeCode.Byte:
394 writer.Write((byte)value);
395 break;
396 case TypeCode.Char:
397 writer.Write(Convert.ToUInt16((char)value));
398 break;
399 case TypeCode.Boolean:
400 writer.Write((byte)(((bool)value) ? 1u : 0u));
401 break;
402 case TypeCode.Int16:
403 writer.Write((short)value);
404 break;
405 case TypeCode.UInt16:
406 writer.Write((ushort)value);
407 break;
408 case TypeCode.Int32:
409 writer.Write((int)value);
410 break;
411 case TypeCode.UInt32:
412 writer.Write((uint)value);
413 break;
414 case TypeCode.Int64:
415 writer.Write((long)value);
416 break;
417 case TypeCode.UInt64:
418 writer.Write((ulong)value);
419 break;
420 case TypeCode.Single:
421 writer.Write((float)value);
422 break;
423 case TypeCode.Double:
424 writer.Write((double)value);
425 break;
426 }
427 return;
428 }
429 if (type == typeof(object))
430 {
431 Type type2 = ((value == null) ? typeof(string) : ((value is Type) ? typeof(Type) : value.GetType()));
432 if (type2 == typeof(object))
433 {
434 throw new ArgumentException(SR.Format(SR.Argument_BadParameterTypeForCAB, type2));
435 }
436 EmitType(writer, type2);
437 EmitValue(writer, type2, value);
438 return;
439 }
440 string p = "null";
441 if (value != null)
442 {
443 p = value.GetType().ToString();
444 }
445 throw new ArgumentException(SR.Format(SR.Argument_BadParameterTypeForCAB, p));
446 }
static void EmitType(BinaryWriter writer, Type type)
static void EmitString(BinaryWriter writer, string str)
static void EmitValue(BinaryWriter writer, Type type, object value)

References System.SR.Argument_BadParameterTypeForCAB, System.SR.Argument_InvalidTypeForCA, System.array, System.Reflection.Array, System.elementType, System.Reflection.Emit.CustomAttributeBuilder.EmitString(), System.Reflection.Emit.CustomAttributeBuilder.EmitType(), System.Reflection.Emit.CustomAttributeBuilder.EmitValue(), System.SR.Format(), System.Type.GetElementType(), System.Type.GetTypeCode(), System.Enum.GetUnderlyingType(), System.Reflection.MaxValue, System.text, System.Reflection.Emit.TypeNameBuilder.ToString(), System.Convert.ToUInt16(), System.Reflection.Type, System.type, System.value, and System.writer.

Referenced by System.Reflection.Emit.CustomAttributeBuilder.CustomAttributeBuilder(), and System.Reflection.Emit.CustomAttributeBuilder.EmitValue().