【发布时间】:2013-11-22 13:36:23
【问题描述】:
为什么会这样:
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。有时值将是 object{decimal} 并且 T 将是 double,在这种情况下将抛出 InvalidCastException。但原则上这不应该是一个问题,因为该值是一个可以转换为双精度的小数(尽管被一个对象装箱)。
我该如何处理?
【问题讨论】:
标签: c# generics casting boxing unboxing