public override uint GetPhysicalLength()
{
if (!Validate())
throw new InvalidOperationException();
var numSizes = 0u;
var numLoBounds = 0u;
var sizesAndLoBoundsLength = 0u;
foreach (var dimension in Dimensions)
{
if (dimension.Size.HasValue)
{
numSizes++;
sizesAndLoBoundsLength += dimension.Size.Value.GetCompressedSize();
}
if (dimension.LowerBound.HasValue)
{
numLoBounds++;
sizesAndLoBoundsLength += dimension.LowerBound.Value.GetCompressedSize();
}
}
return sizeof (byte) +
BaseType.GetPhysicalLength() +
Dimensions.Count.GetCompressedSize() +
numSizes.GetCompressedSize() +
numLoBounds.GetCompressedSize() +
sizesAndLoBoundsLength;
}