【问题标题】:Reflect on a dynamic type to tell if it was a dynamic type, to begin with反思动态类型以判断它是否是动态类型,首先
【发布时间】:2023-03-14 05:00:02
【问题描述】:

有没有一种方法可以判断分配给对象的类型是否是动态类型?

例如:

dynamic foo = GetCat();

Console.WriteLine( (foo is Cat).ToString() ); // will print True because
// at the execution time, foo will have assumed the Cat type. However, is
// there a mechanism by which I can reflect on foo and say, "This guy was assigned
// a dynamic type, to begin with."?

【问题讨论】:

  • 我认为这是不可能的,但由于我不完全确定,我就等着看有什么答案。;)
  • 出于好奇,你为什么想知道?
  • 嗨,埃里克,我认为您的评论是针对卢塞罗的。但我现在怀疑它是针对我最初的问题的。我已通过您的官方电子邮件地址向您发送了一封私人电子邮件,其中包含您问题的答案。

标签: c# reflection dynamic c#-4.0


【解决方案1】:

有没有一种方法可以判断分配给对象的类型是否为动态类型?

不,如果 foo 是局部变量,则不会。

“动态”是一个编译时特性。这只是对编译器的一个提示,意思是“不要费心在编译时尝试对此表达式进行类型分析;相反,生成在运行时调用特殊版本的编译器的代码”。

在运行时,局部变量 foo 只是 object 类型的局部变量,局部变量的内容是对 Cat 的引用。编译器知道代码作者想避免在编译时对 foo 进行类型分析的事实已经丢失。

可以通过使用反射检查方法上编译器生成的属性来确定返回对象的方法是否实际返回动态。

【讨论】:

  • 返回动态类型的方法的属性是什么?我在具有动态类型的字段或属性上看到“DynamicAttribute”,但是当我对其进行反思时(至少,在我的测试用例中没有),该属性没有出现在返回“动态”的方法上??
  • 一个不适用于方法的例子在这里:stackoverflow.com/questions/8439786/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 2012-12-27
  • 2020-07-29
  • 2014-08-27
  • 1970-01-01
  • 2016-03-22
  • 2012-03-03
相关资源
最近更新 更多