【问题标题】:Fixing indentation when object initializers have been used使用对象初始化器时修复缩进
【发布时间】:2009-10-26 11:29:59
【问题描述】:

是否有工具可以自动缩进使用object initializers 的代码,其方式如下:

SomeType someType = new SomeType
{
    Prop1 = "prop 1 value",
    Prop2 = "prop 2 value",
    Things = new List<Thing>
    {
        new Thing
        {
            ThingProp = "thing prop value"
        }
    }
};

即使用与其他 C# 代码中常见的相同的大括号缩进规则。

ReSharper 喜欢更重地缩进,但如果以后代码更改,则不会保持这种意图(我们已关闭各种 ReSharper 选项以防止这种情况发生)。

标准的 Visual Studio 2008 格式化选项 (Ctrl-K-D) 不会更改对象初始值设定项的缩进。

类定义包含在下面

public class Thing
{
    public string ThingProp { get; set; }
}

public class SomeType
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
    public List<Thing> Things { get; set; }
}

【问题讨论】:

    标签: c# formatting coding-style resharper


    【解决方案1】:

    进入 ReSharper / Options / Languages / C# / Formatting Style / Other 并取消选中“Indent array, object and collection initializer block”(靠近底部)。

    (数组、集合和对象初始化器有几个不同的选项,但它们分散在不同的部分。据我所知,预览不会采用您拥有的其他选项选择考虑,这无济于事...)

    如果你让 ReSharper 使用 Ctrl-E Ctrl-C 重新格式化代码,你可以得到它完全按照您的帖子格式化代码。要使嵌入的列表项完全展开,您需要取消选中 Line Breaks and Wrapping 中的“将简单数组、对象和集合放在单行上”——这可能不是您在其他地方想要的。 :(

    【讨论】:

    • 这阻止了 ReSharper 干预格式化,但遗憾的是对自动格式化没有帮助
    • 真的吗?对我来说,它使自动格式化就像我预期的那样工作。当你点击 } 时,它会做什么?
    • 我最初的评论不是 100% 正确 - 这有效,但不适用于 List&lt;Thing&gt; 初始化
    • 好的,我会尝试重现确切的情况并尝试更多选项。
    • 你想如何重新格式化?我通常只是删除 retype 最后一个右括号。
    猜你喜欢
    • 2013-06-27
    • 2013-12-13
    • 2013-02-24
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2020-09-27
    • 1970-01-01
    相关资源
    最近更新 更多