2011-05-19 53 views
2

我試圖讓一個類的所有祖先(類和接口)到一個列表。如何在Coderush中獲得一個課程的祖先?

我試過這段代碼,但沒有工作。

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); 

由於事先

維諾德

回答

1

有一個更好的方法來獲取類的所有祖先:

ITypeElement[] ancestors = curClass.GetBaseTypes(); 

或者這一個:

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

但這些電話會回來uype的ITypeElement類型的實例 - 這取決於你將如何使用祖先的實例。如果您想ITypeElement轉換成一個類的實例,使用下面的代碼:

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

謝謝亞歷克斯,_CodeRush.Source.GetAllBaseTypes(curClass); _確實是一個不錯的功能... :)我是奮鬥了3天與上述代碼和其他嘗試..你的回答真的幫助我..再次感謝你.. – 2011-05-21 20:37:19

相關問題