【问题标题】:Preventing GetType from throwing exceptions on internal types防止 GetType 在内部类型上抛出异常
【发布时间】:2009-11-21 19:37:29
【问题描述】:

有什么方法可以防止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&lt;T&gt; 的实例,并将原始类型保持为内部,这样它们就不会弄乱命名空间。这里的问题是,在返回的 IList&lt;T&gt; 对象之一上调用 GetType() 会导致异常,因为基础类型是内部类型。

有什么方法可以防止这个异常吗?

有什么方法可以强制 GetType 返回typeof(IList&lt;T&gt;) 吗?不确定这是否更好,因为它与标准行为不同。

我了解减少混乱的一种替代方法是将集合分离到另一个命名空间中。不幸的是,一些集合包含额外的方法,并作为公共类型公开。这要么意味着集合被划分在两个不同的命名空间(主要的一个和“内部”)之后,要么它们都在“内部”一个之后,当人们需要那些专门的集合时,他们会导入那个命名空间,而那些简单的集合就会变得混乱再次智能感知。

【问题讨论】:

    标签: c# .net interop assemblies


    【解决方案1】:

    GetType 应该可以在其他程序集的内部类型上正常工作。你看到了什么异常?

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

    【讨论】:

    • 哦。愚蠢的我无法阅读 Visual Studio 测试报告。例外来自 XmlSerializer 的内部,这是有道理的。
    猜你喜欢
    • 2018-12-23
    • 2022-01-07
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多