C# 可以通过遍历对象树来读取注释吗

C# 可以通过遍历对象树来读取注释吗,c#,annotations,C#,Annotations,考虑到下面的代码,是否有一种方法可以遍历对象树并确定所有方法的进度、权重和总体成本 假设我有一个自定义注释: public enum ProgressWeight { ExtraLight, Light, Medium, Heavy, ExtraHeavy } [AttributeUsage(AttributeTargets.Method)] public class Progressable : Attribute { pu

考虑到下面的代码,是否有一种方法可以遍历对象树并确定所有方法的进度、权重和总体成本

假设我有一个自定义注释:

public enum ProgressWeight
  {
    ExtraLight,
    Light,
    Medium,
    Heavy,
    ExtraHeavy
  }

  [AttributeUsage(AttributeTargets.Method)]
  public class Progressable : Attribute
  {
    public ProgressWeight Weight { get; set; }

    public Progressable(ProgressWeight weight)
    {
      this.Weight = weight;
    }
  }
我想这样实施:

public class Sumathig
{
  Foo CompositionObject;

  [Progressable(ProgressWeight.Light)]
  public void DoSomethingLight()
  {
    \\Do something that takes little time
  }

  [Progressable(ProgressWeight.ExtraHeavy)]
  public void DoSomeIntesiveWork()
  {
    CompositionObject = new Foo();
    CompositionObject.DoWork();
    CompositionObject.DoMoreWork();
  }
}

class Foo
{
  [Progressable(ProgressWeight.Medium)]
  public void DoWork()
  {
    \\Do some work
  }

  [Progressable(ProgressWeight.Heavy)]
  public void DoSomeMoreWork()
  {
    \\Do more work
  }
}

选项1-注释

您提供的示例表明,您应该看看:

这种方法使您能够使用运行时可检索的元数据对代码进行注释。整个过程相对简单。有关反射的示例,请查看:

额外阅读

选项2


另一种方法是支持组合,并将所需的元数据作为一个类的属性公开。这可能适用于插件式体系结构。

若您迭代类的
类型的数组或所涉及的方法的
表达式,则应该能够做到这一点。。。不过看起来有点乱。
注释
在本例中是错误的单词。固定标签。它们是
属性
。如果您有关于
类型
(元数据)的信息,那么您就有了所需的所有信息。使用反射。他很可能知道如何访问元数据,他想要的是遍历类树。我认为这是不可能的,除非你使用像Roslyn这样的东西。如果我必须使用编译器,我不太可能走这条路。我需要权衡方法并通过事件展示进展。