c# - 为什么 Roslyn 生成的方法代码没有空格

标签 c# roslyn

Roslyn 生成的代码在标识符和关键字之间没有任何空格,我做错了什么?它还在方法 block 的末尾放置了一个分号。 这是我的代码:

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)
);

这是我得到的结果:

privatevoidsimpleButton1_Click(objectsender,EventArgse){};

最佳答案

为了更加全面,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();

ToString() 将产生预期的输出:

private void simpleButton1_Click(object sender, EventArgs args)
{
}

关于c# - 为什么 Roslyn 生成的方法代码没有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33416745/

相关文章:

c# - 何时在 C# 的接口(interface)方法中使用任务?

c# - linq to sql返回 bool 值

c# - 枚举属性、Web API、JSON 反序列化和拼写错误

c# - 使用 Roslyn API 编译 .NET Core 应用程序

c# - Roslyn C# 编译器是如何引导的?

c# - 字符串拆分成数组不起作用

c# - 从 SharePoint 365 下载文件

c# - 有没有办法在 Roslyn 的分析器和代码修复提供者之间传递数据(除了通过属性包)?

c# - 使用 Roslyn 查找所有类声明而不是从另一个类继承

c# - .Net Core - CS0012 'Object' 在未引用的程序集中定义