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

Foi útil?

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);
  }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top