是否可以通过 Roslyn 生成带有 Enum 参数的属性
Is it possible to generate attribute with Enum parameter via Roslyn
我想生成接收枚举参数值的自定义属性。到目前为止,我已经设法创建了一个带有字符串参数的,但我完全迷失了 Roslyn API 中的枚举管理,当然,文档中缺少示例也无济于事。
我的工作示例:
return SyntaxFactory.AttributeList(
SyntaxFactory.SingletonSeparatedList(
SyntaxFactory.Attribute(
SyntaxFactory.IdentifierName("TestAttribute"),
SyntaxFactory.AttributeArgumentList(
SyntaxFactory.SeparatedList(
new[]
{
SyntaxFactory.AttributeArgument(
SyntaxFactory.LiteralExpression(
SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(
"TestEnum.SomeValue"))))
}
)
)
)
)
);
使用这个片段可以得到这个结果:
[TestAttribute("TestEnum.SomeValue")]
public void SomeMethod() {}
我想达到的效果是这样的:
[TestAttribute(TestEnum.SomeValue)] // Enum instead of string
public void SomeMethod() {}
试试这个:
return SyntaxFactory.AttributeList(
SyntaxFactory.SingletonSeparatedList(
SyntaxFactory.Attribute(
SyntaxFactory.IdentifierName("TestAttribute"),
SyntaxFactory.AttributeArgumentList(
SyntaxFactory.SeparatedList(
new[]
{
SyntaxFactory.AttributeArgument(
SyntaxFactory.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.IdentifierName("TestEnum"),
SyntaxFactory.Token(SyntaxKind.DotToken),
SyntaxFactory.IdentifierName("SomeValue")
)
)
}
)
)
)
)
);
我想生成接收枚举参数值的自定义属性。到目前为止,我已经设法创建了一个带有字符串参数的,但我完全迷失了 Roslyn API 中的枚举管理,当然,文档中缺少示例也无济于事。
我的工作示例:
return SyntaxFactory.AttributeList(
SyntaxFactory.SingletonSeparatedList(
SyntaxFactory.Attribute(
SyntaxFactory.IdentifierName("TestAttribute"),
SyntaxFactory.AttributeArgumentList(
SyntaxFactory.SeparatedList(
new[]
{
SyntaxFactory.AttributeArgument(
SyntaxFactory.LiteralExpression(
SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(
"TestEnum.SomeValue"))))
}
)
)
)
)
);
使用这个片段可以得到这个结果:
[TestAttribute("TestEnum.SomeValue")]
public void SomeMethod() {}
我想达到的效果是这样的:
[TestAttribute(TestEnum.SomeValue)] // Enum instead of string
public void SomeMethod() {}
试试这个:
return SyntaxFactory.AttributeList(
SyntaxFactory.SingletonSeparatedList(
SyntaxFactory.Attribute(
SyntaxFactory.IdentifierName("TestAttribute"),
SyntaxFactory.AttributeArgumentList(
SyntaxFactory.SeparatedList(
new[]
{
SyntaxFactory.AttributeArgument(
SyntaxFactory.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.IdentifierName("TestEnum"),
SyntaxFactory.Token(SyntaxKind.DotToken),
SyntaxFactory.IdentifierName("SomeValue")
)
)
}
)
)
)
)
);