Roslyn を使用して、次のようなパラメーターを作成しようとしています。
[MyAttribute("some_param")]
これで簡単に作成できますが、メソッドを使用しAttributeSyntax
てプロパティに引数を追加する方法がわかりません。適切な表現を作成するために何をする必要があるのか わかりません。ArgumentList
.AddArguments(ExpressionSyntax)
Roslyn を使用して、次のようなパラメーターを作成しようとしています。
[MyAttribute("some_param")]
これで簡単に作成できますが、メソッドを使用しAttributeSyntax
てプロパティに引数を追加する方法がわかりません。適切な表現を作成するために何をする必要があるのか わかりません。ArgumentList
.AddArguments(ExpressionSyntax)
私は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
、引数として a を追加したいと考えています。