You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Roslyn在对象初始化器中添加换行?

用Roslyn实现对象初始化器的格式化换行

要让Roslyn把对象初始化器从单行格式拆成多行,只需在你的格式化选项中添加针对对象初始化器的配置即可。

先看你当前的格式化方法:

public SyntaxNode GetFormatedNode(SyntaxNode node)
{
    var workspace = new AdhocWorkspace();
    OptionSet options = workspace.Options;
    options = options
        .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInMethods, true)
        .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInProperties, true)
        .WithChangedOption(new OptionKey(FormattingOptions.UseTabs, LanguageNames.CSharp), true)
        .WithChangedOption(new OptionKey(FormattingOptions.IndentationSize, LanguageNames.CSharp), 4);

    return Formatter.Format(node, workspace, options);
}

修改后的代码添加了两个关键选项:

public SyntaxNode GetFormatedNode(SyntaxNode node)
{
    var workspace = new AdhocWorkspace();
    OptionSet options = workspace.Options;
    options = options
        .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInMethods, true)
        .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInProperties, true)
        .WithChangedOption(new OptionKey(FormattingOptions.UseTabs, LanguageNames.CSharp), true)
        .WithChangedOption(new OptionKey(FormattingOptions.IndentationSize, LanguageNames.CSharp), 4)
        // 开启对象初始化器大括号换行
        .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInObjectInitializers, true)
        // 可选:给对象初始化器的冒号后加空格,优化可读性
        .WithChangedOption(CSharpFormattingOptions.SpaceAfterColonInObjectInitializer, true);

    return Formatter.Format(node, workspace, options);
}

选项说明:

  • NewLinesForBracesInObjectInitializers:设置为true后,new Column { ... }会拆成两行,大括号单独起一行,内部成员自动缩进。
  • SpaceAfterColonInObjectInitializer:让ID="xxx"变成ID = "xxx",属于可选配置,可按个人代码风格调整。

修改后,你提供的示例代码:

class Example
{
    void Method()
    {
        Column col = new Column { ID = "mySuperColumnID", Code = "mySuperColumnCode" };
    }
}

会被格式化为你期望的样子:

class Example
{
    void Method()
    {
        Column col = new Column
        {
            ID = "mySuperColumnID",
            Code = "mySuperColumnCode"
        };
    }
}

内容的提问来源于stack exchange,提问作者Shems Asfouri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 18:32:35