罗斯林在标识符和关键字之间没有任何空格的情况下生成代码,我做错了什么?它还在方法块的末尾加上一个分号.这是我的代码:
SeparatedSyntaxList<ParameterSyntax> parametersList = new SeparatedSyntaxList<ParameterSyntax>().AddRange
(new ParameterSyntax[]
{
SyntaxFactory.Parameter(SyntaxFactory.Identifier("sender")).WithType(SyntaxFactory.ParseTypeName("object")),
SyntaxFactory.Parameter(SyntaxFactory.Identifier("args")).WithType(SyntaxFactory.ParseTypeName("EventArgs"))
}
);
MethodDeclarationSyntax newMethod = SyntaxFactory.MethodDeclaration(
SyntaxFactory.List<AttributeListSyntax>(),
SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PrivateKeyword)),
SyntaxFactory.ParseName("void"),
null,
SyntaxFactory.Identifier("simpleButton1_Click"),
null,
SyntaxFactory.ParameterList(parametersList),
SyntaxFactory.List<TypeParameterConstraintClauseSyntax>(),
SyntaxFactory.Block(),
SyntaxFactory.Token(SyntaxKind.SemicolonToken)
);
Run Code Online (Sandbox Code Playgroud)
以下是我的结果:
privatevoidsimpleButton1_Click(objectsender,EventArgse){};
Run Code Online (Sandbox Code Playgroud)
为了更加全面,NormalizeWhiteSpace应该提到.它将默认格式应用于给定节点:
MethodDeclarationSyntax newMethod = SyntaxFactory.MethodDeclaration(
SyntaxFactory.List<AttributeListSyntax>(),
SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PrivateKeyword)),
SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.VoidKeyword)),
null,
SyntaxFactory.Identifier("simpleButton1_Click"),
null,
SyntaxFactory.ParameterList(parametersList),
SyntaxFactory.List<TypeParameterConstraintClauseSyntax>(),
SyntaxFactory.Block(),
null
)
newMethod = newMethod.NormalizeWhitespace();
Run Code Online (Sandbox Code Playgroud)
一个ToString()将产生预期输出:
private void simpleButton1_Click(object sender, EventArgs args)
{
}
Run Code Online (Sandbox Code Playgroud)
我认为将分号放在那里是因为您将分号传递给创建方法声明的方法,我猜这是在声明没有主体的抽象方法时使用的。
要正确格式化输出,您可以使用命名空间中的Formatter类Microsoft.CodeAnalysis.Formatting。
Workspace workspace = MSBuildWorkspace.Create();
SyntaxNode formattedNode = Microsoft.CodeAnalysis.Formatting.Formatter.Format(newMethod, workspace);
Run Code Online (Sandbox Code Playgroud)
对于返回类型,您可以执行以下操作
SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.VoidKeyword));
Run Code Online (Sandbox Code Playgroud)
这会给你一个 TypeSyntax
| 归档时间: |
|
| 查看次数: |
1578 次 |
| 最近记录: |