【问题标题】:Different behaviours between .NET 4.0 beta 2 and last release of .NET 4.0?.NET 4.0 beta 2 和 .NET 4.0 的最新版本之间的不同行为?
【发布时间】:2010-06-08 18:19:46
【问题描述】:

我发现 .NET 4.0 Beta 2 与 .NET 4.0 的最新版本之间的 DLR 存在差异。

在 .NET 4.0 Beta 2 中,此代码在运行时完美运行:

 var dateTimeList = new List<DateTime>(); 
 dynamic myDynamicObject = dateTimeList;
 object value = DateTime.Now;
 myDynamicObject.Add(value);

现在,随着 .NET 4.0 的最新版本,我在运行时出现异常(解决 myDynamicObject.Add(value);):-(

在我的真实代码中,“myDynamicObject”是一个动态的(但我知道它始终是一个 ObservableCollection,其中 T 可以是任何东西)。 'value' 是通过一些反射得到的实例。由于 'value' 可以有任何类型,所以 'value' 的类型是 Object。

您知道如何解决 .NET 4.0 的这一新限制吗?

谢谢

【问题讨论】:

  • 很高兴他们修复了这个错误。一个对象不应该突然变成动态的。

标签: c#-4.0 reflection .net-4.0


【解决方案1】:

如果您将value 的类型更改为dynamic,它可以正常工作。 (假设dateTimeListList&lt;DateTime&gt;)。

【讨论】:

  • 这里的原则是如果一个类型在编译时已知,那么该类型也将用于运行时分析。它只是在运行时分析期间使用其运行时类型的动态类型表达式。
猜你喜欢
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 1970-01-01
  • 2011-03-02
相关资源
最近更新 更多