繁体   English   中英

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

[英]Get Attribute object from INamedTypeSymbol.GetAttributes() i.e. AttributeData object?

我定义了以下属性

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

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

可以将其应用于某些类,如下所示:

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

我提供了一个指向Program类的INamedTypeSymbol变量, namedTypeSymbol ,通过它我设法获取了属性的名称。

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

但是,如何访问设置为SomeInfo

您可以通过两种方式将参数传递给属性。 通过设置属性( [Demo(SomeInfo="hello world")] )或通过构造函数进行操作。 如果您使用的命名方法,Ponas是正确的解决之道在于NamedArguments

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM