为什么这项工作:通用铸造
decimal dec = new Decimal(33);
double dd = (double) dec;
Console.WriteLine(dd);
但不是这样的:
decimal dec = new Decimal(33);
object o = (object)dec;
double dd = (double) o;
Console.WriteLine(dd);
第二个例子抛出:
System.InvalidCastException:指定投无效。
这个问题来自一个情况我有一个通用的方法
public T GetValue(string q)
,从数据源获取的值。这些值的类型是未知的,但该方法假定它可以将值转换为T.有时,该值将为对象{decimal},T将为double,在这种情况下,将抛出InvalidCastException。但原则上这不应该是一个问题,因为值是一个十进制数(虽然被对象装箱),可以将其加倍。
我该如何处理这个问题?