有没有办法防止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<T>
的实例公开,并将原始类型保留为内部,这样它们就不会混淆命名空间。这里的问题是,对其中一个返回的GetType()
对象调用IList<T>
会导致异常,因为基础类型是内部类型。
有没有办法阻止此异常?
有没有办法强制GetType返回typeof(IList<T>)
?不确定这是否更好,因为它与标准行为不同。
我理解减少混乱的一种替代方法是将集合分离到另一个名称空间。不幸的是,某些集合包含额外的方法,并作为公共类型公开。这或者意味着集合被分成两个不同的名称空间(主要的一个和'内部'),或者它们都在'内部'之后,当人们需要那些专门的集合时,他们将导入那些名称空间和那些简单的集合杂乱智能感知再次。
答案 0 :(得分:3)
GetType
应该可以在其他程序集的内部类型上正常工作。你看到什么例外?
你确定这是对GetType
本身的调用,它抛出一个异常,而不是后续使用该类型吗?如果你能给出一个简短但完整的程序来证明这个问题,那将会有很大的帮助。