private static object ToUInt16(object value, BuiltInType sourceType)
{
// check for array conversions.
Array array = value as Array;
if (array != null)
{
ushort[] output = new ushort[array.Length];
for (int ii = 0; ii < array.Length; ii++)
{
output[ii] = (ushort)Cast(array.GetValue(ii), BuiltInType.UInt16);
}
return output;
}
// handle for supported conversions.
switch (sourceType)
{
case BuiltInType.UInt16:
{
return (ushort)value;
}
case BuiltInType.Boolean: return Convert.ToUInt16((bool)value);
case BuiltInType.SByte: return Convert.ToUInt16((sbyte)value);
case BuiltInType.Byte: return Convert.ToUInt16((byte)value);
case BuiltInType.Int16: return Convert.ToUInt16((short)value);
case BuiltInType.Int32: return Convert.ToUInt16((int)value);
case BuiltInType.UInt32: return Convert.ToUInt16((uint)value);
case BuiltInType.Int64: return Convert.ToUInt16((long)value);
case BuiltInType.UInt64: return Convert.ToUInt16((ulong)value);
case BuiltInType.Float: return Convert.ToUInt16((float)value);
case BuiltInType.Double: return Convert.ToUInt16((double)value);
case BuiltInType.String:
{
return XmlConvert.ToUInt16((string)value);
}
case BuiltInType.StatusCode:
{
StatusCode code = (StatusCode)value;
return (ushort)(code.CodeBits>>16);
}
}
// conversion not supported.
return DBNull.Value;
}