Как получить предков класса в Кодеруш?
Я пытался получить все предки (классы и интерфейсы) класса в список.
Я пробовал этот код, но не работал.
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);
Но эти вызовы будут возвращать экземпляры типа ITypeElement - это зависит от того, как вы собираетесь использовать экземпляры предков. Если вы хотите преобразовать ITypeElement в экземпляр класса, используйте следующий код:
foreach (ITypeElement ancestor in ancestors)
{
Class classInstance = ancestor.ToLanguageElement() as Class;
if (classInstance != null)
AncestorList.Add(classInstance);
}