2009-11-21 2 views
0

형식이 내부이고 다른 어셈블리에있는 개체에 o.GetType()이 호출되면 예외가 throw되는 것을 방지하는 방법이 있습니까?GetType이 내부 형식에 예외를 throw하지 못하도록 방지

더 많은 기본 .Net 통합 (수집 인터페이스, 스트림, 예외 등)을 활용할 수 있도록 .Net 어셈블리 내에 COM 기반 API를 래핑합니다. 컬렉션은 원래 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의 내장에서 유래합니다. –

관련 문제