我试图将一个类的所有祖先(类和接口)放到列表中。
我尝试了这段代码,但没有用。
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);
先谢谢,
维诺德
答案 0 :(得分:1)
有一种更好的方法可以获得一个类的所有祖先:
ITypeElement[] ancestors = curClass.GetBaseTypes();
或者这个:
ITypeElement[] ancestors = CodeRush.Source.GetAllBaseTypes(curClass);
但是这些调用将返回ITypeElement类型的实例 - 这取决于您将如何使用祖先的实例。如果您想将ITypeElement转换为Class实例,请使用以下代码:
foreach (ITypeElement ancestor in ancestors)
{
Class classInstance = ancestor.ToLanguageElement() as Class;
if (classInstance != null)
AncestorList.Add(classInstance);
}