2

クラスのすべての祖先(クラスとインターフェイス)をリストに入れようとしていました。

このコードを試しましたが、機能しませんでした。

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

前もって感謝します、

ヴィノド

4

1 に答える 1

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);
  }
于 2011-05-20T13:01:11.360 に答える