请考虑以下代码:
public class Foo1
{
public dynamic dowork()
{
return 10;
}
}
在我的Main
中,我称之为:
int i = new Foo1().dowork();
返回值为10.我的问题是为什么此处不需要Unboxing
?但在watch
我已验证Return Type
的{{1}}为{{1} }}
答案 0 :(得分:2)
取消装箱 - 但它是隐式执行的。从任何dynamic
表达式到任何类型的隐式转换。执行的确切转换将取决于值的执行时间类型。
来自C#5规范的第6.1.8节:
从类型
dynamic
的表达式到任何类型T
存在隐式动态转换。转换是动态绑定的(第7.2.2节),这意味着将在运行时从表达式的运行时类型到T
寻找隐式转换。如果未找到转换,则抛出运行时异常。
(这里有一点点细微之处在于它是来自dynamic
类型的任何表达式的转换,而不是来自dynamic
类型本身的转换。这避免了一些转换循环这会导致规范中的其他问题。)