338 {
339 if (o == null)
340 {
342 }
343 else if (o is IConvertible convertible)
344 {
346 v = convertible.GetTypeCode() switch
347 {
348 TypeCode.Empty =>
Empty,
349 TypeCode.Object =>
new Variant(o),
350 TypeCode.DBNull =>
DBNull,
351 TypeCode.Boolean =>
new Variant(convertible.ToBoolean(invariantCulture)),
352 TypeCode.Char =>
new Variant(convertible.ToChar(invariantCulture)),
353 TypeCode.SByte =>
new Variant(convertible.ToSByte(invariantCulture)),
354 TypeCode.Byte =>
new Variant(convertible.ToByte(invariantCulture)),
355 TypeCode.Int16 =>
new Variant(convertible.ToInt16(invariantCulture)),
356 TypeCode.UInt16 =>
new Variant(convertible.ToUInt16(invariantCulture)),
357 TypeCode.Int32 =>
new Variant(convertible.ToInt32(invariantCulture)),
358 TypeCode.UInt32 =>
new Variant(convertible.ToUInt32(invariantCulture)),
359 TypeCode.Int64 =>
new Variant(convertible.ToInt64(invariantCulture)),
360 TypeCode.UInt64 =>
new Variant(convertible.ToUInt64(invariantCulture)),
361 TypeCode.Single =>
new Variant(convertible.ToSingle(invariantCulture)),
362 TypeCode.Double =>
new Variant(convertible.ToDouble(invariantCulture)),
363 TypeCode.Decimal =>
new Variant(convertible.ToDecimal(invariantCulture)),
364 TypeCode.DateTime =>
new Variant(convertible.ToDateTime(invariantCulture)),
365 TypeCode.String =>
new Variant(convertible.ToString(invariantCulture)),
366 _ => throw new NotSupportedException(SR.Format(SR.NotSupported_UnknownTypeCode, convertible.GetTypeCode())),
367 };
368 }
369 else
370 {
372 }
373 }
static CultureInfo InvariantCulture
static readonly Variant Empty
Variant(int flags, object or, long data)
static readonly Variant DBNull