2011-05-19 59 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

相关问题