从INamedTypeSymbol.GetAttributes()获取属性对象,即AttributeData对象?

时间:2016-04-28 16:05:21

标签: c# roslyn

我已经定义了以下属性

[AttributeUsage(AttributeTargets.Class)]
class DemoAttribute : Attribute
{
  public string SomeInfo { get; }

  public DemoAttribute(string someInfo)
  {
    this.SomeInfo = someInfo;
  }
}

可以应用于某个类,如下所示:

[Demo("hello world")]
class Program { }

我提供了指向INamedTypeSymbol类的namedTypeSymbol变量Program,我设法获取该属性的名称。

foreach(var attr in namedTypeSymbol.GetAttributes())
{
  if(attr.AttributeClass.Name == "DemoAttribute") { ... }
}

但是如何访问设置为SomeInfo的内容?

1 个答案:

答案 0 :(得分:1)

有两种方法可以将参数传递给属性。通过设置属性([Demo(SomeInfo="hello world")])或通过构造函数,可以正如您所做的那样。如果您使用了命名方法,Ponas将是正确的,解决方案位于NamedArguments

但是,在使用构造函数时,数据位于ConstructorArguments。这是一个TypedConstant数组,您可以从中获取值"hello world"

string attributeData = (string)attr.ConstructorArguments[0].Value;