Como obter ancestrais de uma classe no Coderush?
-
15-11-2019 - |
Pergunta
Eu estava tentando colocar todos os ancestrais (Classes e Interfaces) de uma Classe em uma lista.
Eu tentei esse código mas não funcionou.
public static List<Class> AncestorList;
public static void GetAncestorList(Class curClass)
{
if(curClass.PrimaryAncestorType!=null)
{
Class primaryAncestor = curClass.PrimaryAncestorType.Resolve(new SourceTreeResolver()) as Class;
if(primaryAncestor !=null)
{
AncestorList.Add(primaryAncestor);//Add primary ancestor to the list.
GetAncestorList(primaryAncestor);//find the ancestors of the primary ancestor.
}
foreach (TypeReferenceExpression typ1 in curClass.SecondaryAncestorTypes )
{
Class secAncestor = typ1.Resolve(new SourceTreeResolver()) as Class;
if(secAncestor !=null)
{
AncestorList.Add(secAncestor);//Add secondary ancestor to the list.
GetAncestorList(secAncestor);//find ancestors of secondary ancestor.
}
}
}
Nesta parte do código tentei coletar todas as classes e interfaces em AncestorList.Mas quando tentei encontrar classes numéricas na lista, ela mostrou 0.O projeto de teste tinha poucas classes e interfaces pai.Por favor, ajude a encontrar o erro.
Fiz uma chamada para a função GetAncestorList da seguinte maneira.
AncestorList=new List<Class>();
GetAncestorList(currentClass);
Desde já, obrigado,
Vinod
Solução
Existe um método melhor para obter todos os ancestrais de uma classe:
ITypeElement[] ancestors = curClass.GetBaseTypes();
ou este:
ITypeElement[] ancestors = CodeRush.Source.GetAllBaseTypes(curClass);
Mas essas chamadas retornarão instâncias do tipo ITypeElement - depende de como você vai usar instâncias de ancestrais.Se desejar converter ITypeElement em uma instância de Class, use o seguinte código:
foreach (ITypeElement ancestor in ancestors)
{
Class classInstance = ancestor.ToLanguageElement() as Class;
if (classInstance != null)
AncestorList.Add(classInstance);
}