C# 防止GetType在内部类型上引发异常

C# 防止GetType在内部类型上引发异常,c#,.net,interop,assemblies,C#,.net,Interop,Assemblies,当对类型为内部且驻留在另一个程序集中的对象调用时,是否有任何方法防止o.GetType()引发异常 我将一个基于COM的API包装在.Net程序集中,这样就可以从更多的本机.Net集成(集合接口、流、异常等)中获益。原始API的集合已按以下方式包装: internal class ComItems : IList<ComItem> { internal ComItems(ComApi.ComItems unmanaged) { this.unmanaged = unmanag

当对类型为内部且驻留在另一个程序集中的对象调用时,是否有任何方法防止
o.GetType()
引发异常

我将一个基于COM的API包装在.Net程序集中,这样就可以从更多的本机.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
{
内部ComItems(ComApi.ComItems非托管){this.unmanaged=unmanaged;}
公共无效添加(ComItem项){
this.unmanaged.Add(-1,item.ToUnmanaged());
}
//IList实现的其余部分
}
由于有几个这样的集合,我希望将它们公开为
IList
的实例,并将原始类型保留为内部类型,这样它们就不会使名称空间变得混乱。这里的问题是,对一个返回的
IList
对象调用
GetType()
会导致异常,因为基础类型是内部类型

有什么方法可以防止这种异常

有没有办法强制GetType返回
typeof(IList)
?但不确定这是否更好,因为它不同于标准行为


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

GetType
可以很好地处理来自其他程序集的内部类型。你看到了什么例外


您确定是对
GetType
本身的调用引发了异常,而不是该类型的后续使用吗?如果您能给出一个简短但完整的程序来演示这个问题,那将非常有帮助。

GetType
可以很好地处理来自其他程序集的内部类型。你看到了什么例外


您确定是对
GetType
本身的调用引发了异常,而不是该类型的后续使用吗?如果你能给出一个简短但完整的程序来演示这个问题,那将非常有帮助。

D'oh。愚蠢的我无法阅读Visual Studio测试报告。例外来自XmlSerializer的内部,这很有意义。愚蠢的我无法阅读Visual Studio测试报告。异常来自XmlSerializer的内部,这是有意义的。