是否可以通过 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")
                                )
                            )
                        }
                    )
                )
            )
        )
    );