Как получить предков класса в Кодеруш? - PullRequest
2 голосов
/ 19 мая 2011

Я пытался получить список всех предков (классов и интерфейсов) класса в списке.

Я пробовал этот код, но он не работал.

 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.
              }
          }
      }  

В этой частиКод Я попытался собрать все классы и интерфейсы в AncestorList.Но когда я попытался найти классы чисел в списке, он показал 0. В тестовом проекте было мало родительских классов и интерфейсов.Пожалуйста, помогите найти ошибку.

Я вызвал функцию GetAncestorList следующим образом.

AncestorList=new List<Class>();
GetAncestorList(currentClass);

Заранее спасибо,

Vinod

1 Ответ

1 голос
/ 20 мая 2011

Есть лучший способ получить всех предков класса:

ITypeElement[] ancestors = curClass.GetBaseTypes();

или этот:

ITypeElement[] ancestors = CodeRush.Source.GetAllBaseTypes(curClass);

Но эти вызовы будут возвращать экземпляры типа ITypeElement - это зависит от того, как вы собираетесь использовать экземпляры предков. Если вы хотите преобразовать ITypeElement в экземпляр класса, используйте следующий код:

  foreach (ITypeElement ancestor in ancestors)
  {
    Class classInstance = ancestor.ToLanguageElement() as Class;
    if (classInstance != null)
      AncestorList.Add(classInstance);
  }
...