【问题标题】:How to get ancestors of a class in Coderush?如何在 Coderush 中获取某个类的祖先?
【发布时间】:2011-05-19 14:20:56
【问题描述】:

我试图将一个类的所有祖先(类和接口)放到一个列表中。

我试过这段代码,但没有用。

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

提前致谢,

维诺德

【问题讨论】:

    标签: coderush coderush-xpress dxcore


    【解决方案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);
      }
    

    【讨论】:

    • 谢谢 Alex,CodeRush.Source.GetAllBaseTypes(curClass); 确实是一个很好的功能...:) 我在上面的代码和其他尝试中挣扎了 3 天..您的回答对我很有帮助..再次感谢您..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多