![](/img/trans.png)
[英]How do I get AttributeData from AttributeSyntax in Roslyn?
[英]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.