【问题标题】:Cast a dynamic variable to a given Type将动态变量转换为给定的类型
【发布时间】:2011-02-09 22:19:12
【问题描述】:

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

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

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

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

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

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

提前致谢。

【问题讨论】:

  • 我不确定您的方法是否最好,我宁愿使用接口或通用基类强烈键入变量。
  • 如果您要以强制转换的形式为编译器提供足够的信息来静态解析调用,那么为什么类型是动态的?这对我来说没有任何意义。动态的要点是当类型在编译时不已知时使用它。

标签: c# dynamic c#-4.0


【解决方案1】:

强制转换操作 ((SomeType)x) 的 lower precedence 比 . 多。
因此,您的代码被解析为 (Bar)(myvar.mymethodofbar()) — 转换发生在方法调用之后。

需要加括号:

((Bar)myvar).mymethodofbar();

【讨论】:

  • 不错!你介意告诉我们你什么时候不在 SO 上吗? (所以我们其他人可以挤一些答案)
  • @tzup:美国东部标准时间晚上 11 点到早上 8 点之间。
【解决方案2】:
((Foo)myvar).mymethodoffoo();
((Bar)myvar).mymethodofbar();

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 2014-07-02
    • 2020-06-18
    • 1970-01-01
    • 2017-09-20
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多