public override void Write(WritingContext context)
{
if (Value == null)
throw new ArgumentNullException();
var writer = context.Writer;
switch (Type.GetTypeCode(Value.GetType()))
{
case TypeCode.Boolean:
writer.WriteByte((byte)((bool)Value ? 1 : 0));
break;
case TypeCode.Byte:
writer.WriteByte((byte)Value);
break;
case TypeCode.Char:
writer.WriteUInt16((char)Value);
break;
case TypeCode.Double:
writer.WriteDouble((double)Value);
break;
case TypeCode.Int16:
writer.WriteInt16((short)Value);
break;
case TypeCode.Int32:
writer.WriteInt32((int)Value);
break;
case TypeCode.Int64:
writer.WriteInt64((long)Value);
break;
case TypeCode.SByte:
writer.WriteSByte((sbyte)Value);
break;
case TypeCode.Single:
writer.WriteSingle((float)Value);
break;
case TypeCode.String:
writer.WriteSerString((string)Value);
break;
case TypeCode.UInt16:
writer.WriteUInt16((ushort)Value);
break;
case TypeCode.UInt32:
writer.WriteUInt32((uint)Value);
break;
case TypeCode.UInt64:
writer.WriteUInt64((ulong)Value);
break;
default:
var typeSignature = Value as TypeSignature;
if (typeSignature != null)
writer.WriteSerString(TypeNameBuilder.GetAssemblyQualifiedName(typeSignature));
else
throw new NotSupportedException();
break;
}
}