Coderushでクラスの先祖を取得する方法
-
15-11-2019 - |
質問
私はクラスのすべての先祖(クラスとインタフェース)をリストに取得しようとしていました。
私はこのコードを試してみましたが機能しませんでした。
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.
}
}
}
.
コードのこの部分では、すべてのクラスとインタフェースを祖先リストに収集しようとしました。 ただし、リスト内の番号クラスを見つけようとしたとき、それは0を示しました。テストプロジェクトには、親クラスとインタフェースがほとんどありませんでした。エラーを見つけるのを助けてください。
次のようにしてGetAnceStorList関数を呼び出しました。
AncestorList=new List<Class>();
GetAncestorList(currentClass);
.
事前にありがとう、
Vinod
解決
There's a better method to get all ancestors of a class:
ITypeElement[] ancestors = curClass.GetBaseTypes();
or this one:
ITypeElement[] ancestors = CodeRush.Source.GetAllBaseTypes(curClass);
But these calls will return instances of ITypeElement type - it depends on how you are going to use instances of ancestors. If you'd like to convert ITypeElement into a Class instance, use the following code:
foreach (ITypeElement ancestor in ancestors)
{
Class classInstance = ancestor.ToLanguageElement() as Class;
if (classInstance != null)
AncestorList.Add(classInstance);
}
所属していません StackOverflow