System.Collections.ObjectModel.ObservableCollection仅在Monotouch中部分实现?

时间:2012-01-10 16:10:36

标签: wcf collections mono xamarin.ios observablecollection

我正在使用Silverlight 3存根来使用WCF服务,我需要的一个参数是System.Collections.ObjectModel.ObservableCollection。 但是,以下代码抛出NotImplementedException

ItemType[] aItemTypes = ...;
ObservableCollection<ItemType> aTypes = null;
if(aItemTypes != null)
{
    aTypes = new ObservableCollection<ItemType> (aItemTypes);
}

如果我使用foreach循环手动添加所有条目而不是使用带有可枚举的构造函数,它可以正常工作。有没有理由为什么构造函数丢失或者它只是被遗忘?

1 个答案:

答案 0 :(得分:1)

  

是否存在构造函数丢失或仅仅是遗忘的原因?

当有人实现类型但不需要其中的所有内容时,有时会在Mono基类库源代码上发生这种情况。在这种情况下,最好为缺少的代码添加 stubs ,因为:

  • 允许编译现有代码;
  • 在运行时避免MissingMethodExceptionNotImplementedException更容易诊断;
  • 允许Mono的工具,例如 MoMA Gendarme,报告现有.NET代码的NotImplementedException

在这种特殊情况下,我怀疑需要进行更多测试,以确定被复制的项目是否需要触发事件(直接添加它们)。

好消息是这种方法是在Mono的GIT master中实现的。我会考虑将其移植到 mono-2-10 分支中,以便MonoTouch将在以后的版本中获得它。