private static object ToStatusCode(object value, BuiltInType sourceType)
{
// check for array conversions.
Array array = value as Array;
if (array != null)
{
StatusCode[] output = new StatusCode[array.Length];
for (int ii = 0; ii < array.Length; ii++)
{
output[ii] = (StatusCode)Cast(array.GetValue(ii), BuiltInType.StatusCode);
}
return output;
}
// handle for supported conversions.
switch (sourceType)
{
case BuiltInType.StatusCode:
{
return (StatusCode)value;
}
case BuiltInType.UInt16:
{
uint code = Convert.ToUInt32((ushort)value);
code <<= 16;
return (StatusCode)code;
}
case BuiltInType.Int32:
{
return (StatusCode)Convert.ToUInt32((int)value);
}
case BuiltInType.UInt32:
{
return (StatusCode)(uint)value;
}
case BuiltInType.Int64:
{
return (StatusCode)Convert.ToUInt32((long)value);
}
case BuiltInType.UInt64:
{
return (StatusCode)Convert.ToUInt32((ulong)value);
}
}
// conversion not supported.
return null;
}