internal int ValidateAndGetLength()
{
if (_value == null) {
throw new InvalidCastException($"Parameter {ParameterName} must be set");
}
if (_value is DBNull) {
return 0;
}
// No length caching for simple types
var asSimpleWriter = Handler as ISimpleTypeHandler;
if (asSimpleWriter != null) {
return asSimpleWriter.ValidateAndGetLength(Value, this);
}
var asChunkingWriter = Handler as IChunkingTypeHandler;
Contract.Assert(asChunkingWriter != null,
$"Handler {Handler.GetType().Name} doesn't implement either ISimpleTypeWriter or IChunkingTypeWriter");
var lengthCache = LengthCache;
var len = asChunkingWriter.ValidateAndGetLength(Value, ref lengthCache, this);
LengthCache = lengthCache;
return len;
}