मैं कस्टम विशेषता उत्पन्न करना चाहता हूं जो Enum पैरामीटर मान प्राप्त करता है। अब तक, मैंने एक स्ट्रिंग पैरामीटर के साथ एक बनाने में कामयाबी हासिल की है, लेकिन मैं पूरी तरह से रोसलिन एपीआई में गणना प्रबंधन के बारे में खो गया हूं, और प्रलेखन में नमूनों की कमी निश्चित रूप से मदद नहीं करती है।

मेरा कामकाजी उदाहरण:

    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() {}
0
Jon Grey 4 अगस्त 2020, 20:51

1 उत्तर

सबसे बढ़िया उत्तर

ये कोशिश करें:

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")
                                )
                            )
                        }
                    )
                )
            )
        )
    );
0
Paulo Morgado 5 अगस्त 2020, 00:32