내가 모든 하위 클래스가 특정 기본 클래스
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을 사용할 수있다.
VisualStudioHelper.CodeModel.GetAllCodeElementsOfType (project.CodeModel.CodeElements, EnvDTE.vsCMElement.vsCMElementClass, false); – Anders