【发布时间】:2013-02-19 20:43:24
【问题描述】:
一直在使用 4.0 DLR 并正在将动态与对象进行比较并遇到了这个问题:
代码:
object x = 10;
Console.WriteLine("x = {0} and is a {1}.\n", x, x.GetType());
x = (int)x + 3;
Console.WriteLine("x = {0} and is a {1}.\n", x, x.GetType());
x = x + "a";
Console.WriteLine("x = {0} and is a {1}.\n", x, x.GetType());
结果:
x = 10 并且是 System.Int32。
x = 13 并且是 System.Int32。
x = 13a 并且是 System.String。
在我看来,对象似乎试图在运行时(动态)使对象适应类型。但是,如果我不在第 3 行将 x 转换为 int,它会给我一个编译器区域,这对于静态类型来说似乎是正确的。但随后它允许我向 x 添加一个“a”,现在它将它识别为一个字符串。
我错过了什么?
【问题讨论】:
-
不知道是不是因为String其实是一个Object,而3是base类型。