2013-09-01 2 views
3

특정 기본 클래스를 상속하는 모든 클래스를 반복하려고합니다. 대부분의 링크는 유형의 T4 편집기에 대한 참조를 찾습니다. 이 SO 그 대답처럼 거의 내가유형의 VisualStudioHelper를 사용하여 클래스를 반복하십시오.

get-all-methods-that-are-decorated-with-a-%20specific-attribute-using-t4-envdte

문제는 나는 그가 나는 내가 사용하고이 템플릿 enter image description here

을 사용하고 GetAllCodeElementsOfType

를 같이 사용하는 방법을 찾을 수 없습니다입니다 원하는 것을 올바른 템플릿? 여기

+1

VisualStudioHelper.CodeModel.GetAllCodeElementsOfType (project.CodeModel.CodeElements, EnvDTE.vsCMElement.vsCMElementClass, false); – Anders

답변

3

내가 모든 하위 클래스가 특정 기본 클래스

public IEnumerable<CodeClass> GetSubClasses(string baseClass, Project project) 
{ 
    var classes = VisualStudioHelper.CodeModel.GetAllCodeElementsOfType(project.CodeModel.CodeElements, EnvDTE.vsCMElement.vsCMElementClass, false); 
    var subClasses = new List<CodeClass>(); 
    foreach (CodeClass @class in classes) 
    { 
     foreach (CodeClass @base in GetInheritance(@class)) 
     { 
      if (@base.FullName == baseClass) 
       subClasses.Add(@class); 
     } 

    } 

    return subClasses; 
} 

public IEnumerable<CodeClass> GetInheritance(CodeClass @class) 
{ 
    return GetInheritance(@class, new List<CodeClass>()); 
} 

public IEnumerable<CodeClass> GetInheritance(CodeClass @class, List<CodeClass> collection) 
{ 
    foreach (CodeClass @base in @class.Bases) 
    { 
     collection.Add(@base); 
     GetInheritance(@base, collection); 
    } 

    return collection; 
} 
을 구현 얻기 위해 쓴 도우미 메서드입니다 , 나는 발견

내가 Linq에 그들을 다시 쓸 것이다 당신은 형식화되지 않은 배열에 < .Cast>을 할 경우 당신은 코드를 조금 더 깨끗하게 만들 수 있도록 Linq을 사용할 수있다.

관련 문제