2009-11-12 5 views
0

리플렉션을 통해 유형에 사용 된 모든 네임 스페이스를 체크 아웃 할 방법이 필요합니다.Type에서 참조 된 네임 스페이스 읽기

namespace My.Program.BaseTypes 
{ 
    using System; 
    using System.Text; 
    using My.Program.Extenders; 
    using My.Program.Helpers; 
    using My.Program.Interfaces; 

    public class MyTypeBase 
    { 
     public MyTypeBase() 
     { 
     } 

     public My.Program.Helpers.HelperTypeX X 
     { 
      get; 
      set; 
     } 

     public My.Program.Extenders.ExtenderTypeY Y 
     { 
      get; 
      set; 
     } 

     public My.Program.Interfaces.InterfaceZ IZ 
     { 
      get; 
      set; 
     } 
    } 
} 

나는 내 코드에 MyTypeBase 만 Type을 가지고 MyTypeBase에 반사와 모든 속성의 모든 참조 된 네임 스페이스를 찾을 필요가있다.

확실히 모든 속성을 루프 할 수 있고, 유형을 가져 와서 네임 스페이스를 확인할 수 있지만,이 목표를 달성하기위한 더 깨끗한 방법이 있습니까?

문제를 방지하기 위해 일부 레거시 코드를 기반으로 새로운 클래스를 생성하는 생성기를 작성합니다.

답변

1

아니요,이 작업을보다 명확하게 처리 할 수는 없습니다. 이름 공간을 사용하는 유형 자체에 대한 실제 개념은 없습니다. 유형 자체 (유형/리턴 유형, 필드 유형, 이벤트 핸들러 유형, 중첩 클래스 유형 또는 매개 변수 유형 중 하나)를 참조하는 멤버가 있지만 그것들은 단지 개인 회원들입니다. 즉 인덱서 매개 변수 유형의 네임 스페이스를 선택하지 않습니다

var namespaces = type.GetProperties() 
        .Select(p => p.PropertyType.Namespace) 
        .Distinct(); 

참고 : 플러스 측면에서

, LINQ로는 ... 같은 뭔가를 열심히해서는 안됩니다.

+0

나는 이런 식으로 생각하고 linq 및 lambda 식을 사용하여 책을 더 빨리 읽어야합니다. ;-) –

관련 문제