public override uint GetPhysicalLength() { if (Value == null) { return(1); } switch (Type.GetTypeCode(Value.GetType())) { case TypeCode.Boolean: case TypeCode.Byte: case TypeCode.SByte: return(sizeof(byte)); case TypeCode.Char: case TypeCode.Int16: case TypeCode.UInt16: return(sizeof(ushort)); case TypeCode.Single: case TypeCode.Int32: case TypeCode.UInt32: return(sizeof(uint)); case TypeCode.Double: case TypeCode.Int64: case TypeCode.UInt64: return(sizeof(ulong)); case TypeCode.String: return((Value as string).GetSerStringSize()); } var typeSignature = Value as TypeSignature; if (typeSignature != null) { return(TypeNameBuilder.GetAssemblyQualifiedName(typeSignature).GetSerStringSize()); } throw new NotSupportedException("Invalid or unsupported argument element value in custom attribute."); }
/// <inheritdoc /> public override void Write(MetadataBuffer buffer, IBinaryStreamWriter writer) { if (Value == null) { writer.WriteSerString(null); return; } 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: if (Value is TypeSignature typeSignature) { writer.WriteSerString(TypeNameBuilder.GetAssemblyQualifiedName(typeSignature)); } else { throw new NotSupportedException(); } break; } }
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; } }