object o = 123456U;
ulong l = (ulong) o; // fails
object o = 123456U;
ulong l = (ulong) (uint) o; // succeeds
void foo(object o)
{
switch (Type.GetTypeCode(o.GetType()))
{
case TypeCode.UInt32:
case TypeCode.UInt64:
ulong l = (ulong) o;
RunUnsignedIntVersion(l);
break;
case TypeCode.Int32:
case TypeCode.Int64:
long n = (long) o;
RunSignedVersion(n);
break;
}
}
foo(123456U);
foo(123456);
case TypeCode.Int32:
RunSignedVersion((int) o);
break;
case TypeCode.Int64:
long n = (long) o;
RunSignedVersion(n);
break;
void foo(object o)
{
switch (Type.GetTypeCode(o.GetType()))
{
case TypeCode.UInt32:
case TypeCode.UInt64:
ulong l = Convert.ToUInt64(o);
RunUnsignedIntVersion(l);
break;
case TypeCode.Int32:
case TypeCode.Int64:
long n = Convert.ToInt64(o);
RunSignedVersion(n);
break;
}
}
[CLSCompliant(false)]
public static ulong ToUInt64(object value) {
return value == null? 0: ((IConvertible)value).ToUInt64(null);
}
[CLSCompliant(false)]
public static long ToInt64(object value) {
return value == null? 0: ((IConvertible)value).ToInt64(null);
}
case TypeCode.Int32:
RunSignedVersion((int) o);
break;
case TypeCode.Int64:
long n = (long) o;
RunSignedVersion(n);
break;
public static class ConversionExtensions
{
public static ulong ToUInt64(this object value)
{
return ((IConvertible)value).ToUInt64();
}
}
object o = 123456U;
ulong l = o.ToUInt64();