在我的程序中,我使用Roslyn,我需要用新节点替换节点。例如,如果我有像
这样的代码public void Foo()
{
for(var i = 0; i < 5; i++)
Console.WriteLine("");
}
我想为for语句插入括号,我得
public void Foo()
{
for(var i = 0; i < 5; i++)
{
Console.WriteLine("");
}
}
我尝试使用NormalizeWhitespace,但如果我在for语句中使用它,我会得到
public void Foo()
{
for(var i = 0; i < 5; i++)
{
Console.WriteLine("");
}
}
但是,我想要正确格式化语句。有任何提示怎么做?
编辑: 我用以下方法解决了这个问题:
var blockSyntax = SyntaxFactory.Block(
SyntaxFactory.Token(SyntaxKind.OpenBraceToken).WithLeadingTrivia(forStatementSyntax.GetLeadingTrivia()).WithTrailingTrivia(forStatementSyntax.GetTrailingTrivia()),
syntaxNodes,
SyntaxFactory.Token(SyntaxKind.CloseBraceToken).WithLeadingTrivia(forStatementSyntax.GetLeadingTrivia()).WithTrailingTrivia(forStatementSyntax.GetTrailingTrivia())
);
然而,Sam的回答也是正确的。
答案 0 :(得分:4)
您需要使用.WithAdditionalAnnotations(Formatter.Annotation)
,但仅限于要格式化的特定元素。这是NullParameterCheckRefactoring项目的一个例子。
IfStatementSyntax nullCheckIfStatement = SyntaxFactory.IfStatement(
SyntaxFactory.Token(SyntaxKind.IfKeyword),
SyntaxFactory.Token(SyntaxKind.OpenParenToken),
binaryExpression,
SyntaxFactory.Token(SyntaxKind.CloseParenToken),
syntaxBlock, null).WithAdditionalAnnotations(Formatter.Annotation, Simplifier.Annotation);