【问题标题】:Dynamic does not contain a definition for GetType()Dynamic 不包含 GetType() 的定义
【发布时间】:2020-02-19 15:46:29
【问题描述】:

我的代码中有一个动态类型的变量,我想做的是获取分配对象的类型,但动态字段中似乎没有可用的属性或方法。

我的代码是这样的:

dynamic readings;

private void method()
{
    Type type= readings.GetType();
}

我在这里做错了吗?

GetType 使用参考:

How do I check type of dynamic datatype at runtime?

【问题讨论】:

  • 当您调用method() 时,您的readings 字段的值是多少?
  • 您是否尝试过帖子中链接的问题中接受的答案? stackoverflow.com/a/23143276/5062791
  • 您声明的引用不直接使用GetType(),而是使用((ObjectHandle)readings).Unwrap().GetType()
  • 每次使用dynamic,都会有一只小猫死去……
  • 但是如果你不知道对象里面有什么,你怎么可能使用它呢?

标签: c# xamarin xamarin.forms c#-7.0


【解决方案1】:

只需将其转换为 object:

Type type = ((object)readings).GetType();

成为dynamic 意味着所有调用都可以被拦截,但这是一个编译器技巧,而不是该类型的固有特性。将其转换为object 意味着编译器停止这样做。在幕后,dynamic 只是 object 的一个花哨的词无论如何

但是请注意,混合反射 (GetType()) 和 dynamic 通常是个坏主意;虽然对象可以作为dynamic 工作(通过将反射API 重新公开为dynamic),但情况并非总是如此,dynamic 的许多(大多数?)实现完全呈现在反射方面不存在的人造成员。这是dynamic有点的要点,“哦,它还让你变得懒惰,在不知道类型的情况下与类型交谈”只是一个方便的副作用。

【讨论】:

  • 修改太少,无法获得批准的编辑,GetType ;-)
  • @ColinM 已修复,ta
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
相关资源
最近更新 更多