2009-11-21 60 views
0

有没有什么办法可以防止o.GetType()在类型为内部并驻留在另一个程序集中的对象上调用时引发异常?防止GetType在内部类型上抛出异常

我在一个.Net程序集中封装了一个基于COM的API,以便可以从更多的本地.Net集成(集合接口,流,异常等)中受益。藏品原来的API已经被包裹在以下方式:

internal class ComItems : IList<ComItem> 
{ 
    internal ComItems(ComApi.ComItems unmanaged) { this.unmanaged = unmanaged; } 

    public void Add(ComItem item) { 
     this.unmanaged.Add(-1, item.ToUnmanaged()); 
    } 

    // Rest of the IList implementation 
} 

由于存在多种这些藏品我想它们暴露为IList<T>实例,并保留原始类型的内部,使他们不杂乱命名空间。这里的问题是,在返回的IList<T>对象中的一个上调用GetType()会导致例外,因为基础类型是内部类型。

有什么办法可以防止这种异常吗?

有什么办法可以强制GetType返回typeof(IList<T>)而不是?不知道这是否更好,因为它不同于标准行为。

我知道减少混乱的另一种方法是将集合分离到另一个名称空间。不幸的是一些集合包含额外的方法,并公开类型。这或者意味着集合被分成两个不同的命名空间(主要集合和“内部”),或者它们都落后于“内部”集合,当人们需要这些专用集合时,他们将导入命名空间和那些简单集合混乱再次IntelliSense。

回答

3

GetType应该可以很好地处理来自其他程序集的内部类型。你看到什么异常?

你确定这是对GetType本身的调用,它抛出一个异常,而不是该类型的后续使用?如果你能给出一个简短但完整的程序来证明这个问题,那将会有很大的帮助。

+0

D'oh。愚蠢的我无法阅读Visual Studio测试报告。这个例外来自XmlSerializer的内部,这是有道理的。 – 2009-11-21 20:02:58