2012-01-10 79 views
1

我在使用Silverlight 3存根使用WCF服务,我需要的一个参数是System.Collections.ObjectModel.ObservableCollection。 但是下面的代码是抛出一个NotImplementedExceptionSystem.Collections.ObjectModel.ObservableCollection仅在Monotouch中部分实现?

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

如果我使用foreach循环添加的所有条目手动而不是使用需要一个枚举的构造,它的工作原理。有没有理由为什么构造函数丢失或被遗忘?

回答

1

有没有理由为什么构造函数丢失或只是被遗忘?

当有人实现一个类型但不需要它里面的所有东西时,这有时会出现在Mono基类库源代码中。在这种情况下,最好添加存根失踪的代码,因为这样的:

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

在这个特定的情况下,我怀疑需要更多的测试来查看被复制的项目是否需要触发事件(whgen添加它们)。

好消息是这种方法是在Mono的GIT主控中实现的。我会考虑将此backporting到mono-2-10分支,所以MonoTouch将在未来的版本中获得它。

+0

mono-2-10已经更新(对于Mono for Android,其他人必须具有相同的条件),因此此方法的*实现*将成为下一个MonoTouch 5.1.x版本的一部分。 – poupou 2012-01-10 18:55:20