将动态变量强制转换为给定的Type

时间:2011-02-09 14:12:58

标签: c# dynamic c#-4.0

我有一个动态变量,我根据上下文存储一个可以是多种类型的对象(这里是 Foo Bar

dynamic myvar;
myvar = new Foo();
//or
myvar = new Bar();

Foo和Bar包含不同的方法。 为了能够访问myvar的方法,我认为可以使用像

这样的强制转换
(Foo)myvar.mymethodoffoo();
(Bar)myvar.mymethodofbar();

但它没有用,我在代码编辑器中得到(动态表达式)此操作将在运行时解析

那么,我如何投射动态对象以从编辑器中获取可用的方法和属性?

提前感谢。

2 个答案:

答案 0 :(得分:10)

施法操作((SomeType)x)的lower precedence. 因此,您的代码被解析为(Bar)(myvar.mymethodofbar()) - 在方法调用之后进行转换。

您需要添加括号:

((Bar)myvar).mymethodofbar();

答案 1 :(得分:2)

((Foo)myvar).mymethodoffoo();
((Bar)myvar).mymethodofbar();