1

我遇到了这种情况,发现下面的代码解决了这个问题。我想知道它为什么起作用。

假设我有以下情况:

int i = 2;
object o = (object)i;
decimal d = (decimal)o;

这将因无效的强制转换异常而失败

虽然下面的代码可以工作:

int i = 2;
object o = (object)i;
dynamic dyn = o;
decimal d = (decimal)dyn;

非常感谢。

4

1 回答 1

1

第一个示例中的转换失败,因为在objectand之间没有定义转换运算符decimalo作为具有转换运算符的类型的基础值没有区别,因为运行时仅使用操作数的类型。

在第二个示例中,转换dyndecimal包括一个额外的步骤,其中 DLRdyn使用(我猜)它的值来计算 的基础类型。因为它使用值来确定它最终使用的类型int,因此可以绑定到定义的int转换decimal运算符。

于 2012-11-30T09:52:38.763 回答