public override void Write(WritingContext context)
{
if (!Validate())
throw new InvalidOperationException();
var writer = context.Writer;
writer.WriteByte((byte)ElementType);
BaseType.Write(context);
writer.WriteCompressedUInt32((uint)Dimensions.Count);
var sizedDimensions = Dimensions.Where(x => x.Size.HasValue).ToArray();
writer.WriteCompressedUInt32((uint)sizedDimensions.Length);
foreach (var sizedDimension in sizedDimensions)
writer.WriteCompressedUInt32((uint)sizedDimension.Size.Value);
var boundedDimensions = Dimensions.Where(x => x.LowerBound.HasValue).ToArray();
writer.WriteCompressedUInt32((uint)boundedDimensions.Length);
foreach (var boundedDimension in boundedDimensions)
writer.WriteCompressedUInt32((uint)boundedDimension.LowerBound.Value);
}