簡體   English   中英

如何使用參數創建AttributeSyntax

[英]How to create an AttributeSyntax with a parameter

我正在嘗試使用Roslyn創建一個看起來像這樣的參數:

[MyAttribute("some_param")]

現在我可以輕松創建AttributeSyntax但無法弄清楚如何使用.AddArguments(ExpressionSyntax)方法向ArgumentList AttributeSyntax添加參數。 我只是不確定我需要做什么才能創建合適的表達式。

我是SyntaxFactory.Parse*方法的粉絲。 (他們通常更容易理解)

您可以使用以下命令生成您正在尋找的屬性:

var name = SyntaxFactory.ParseName("MyAttribute");
var arguments = SyntaxFactory.ParseAttributeArgumentList("(\"some_param\")");
var attribute = SyntaxFactory.Attribute(name, arguments); //MyAttribute("some_param")

var attributeList = new SeparatedSyntaxList<AttributeSyntax>();
attributeList = attributeList.Add(attribute);
var list = SyntaxFactory.AttributeList(attributeList);   //[MyAttribute("some_param")]

或者,您可以使用Kirill的RoslynQuoter工具手工制作的方法。 但我認為沒有人想要在沒有他的工具的情況下編寫代碼的事實就是在說; ...)

手動方法如下:

var attributeArgument = SyntaxFactory.AttributeArgument(
    SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression, SyntaxFactory.Token(default(SyntaxTriviaList), SyntaxKind.StringLiteralToken, "some_param", "some_param", default(SyntaxTriviaList))));

var otherList = new SeparatedSyntaxList<AttributeArgumentSyntax>();
otherList = otherList.Add(attributeArgument);
var argumentList = SyntaxFactory.AttributeArgumentList(otherList);
var attribute2 = SyntaxFactory.Attribute(name, argumentList);

在您的示例中,您希望添加StringLiteralExpression作為參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM