如何自定义“Encapsulate Field”生成的代码格式?

时间:2015-07-28 21:22:16

标签: c# visual-studio-2015 code-formatting

以前我很确定“Encapsulate Field”命令会变成如下所示:

public int SomeNumber;

进入以下(我强烈要求来自VS 2015):

private int someNumber;

public int SomeNumber {
    get { return someNumber; }
    set { someNumber = value; }
}

但在Visual Studio 2015中我看到以下内容:

private int someNumber;

public int SomeNumber {
    get {
        return someNumber;
    }

    set {
        someNumber = value;
    }
}

有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:7)

这是VS2015的设计变更。在以前的版本中,重构命令注意到工具>选项>文本编辑器> C#>环绕> “在单行上留下阻止”选项。打开它后,你将获得属性getter和setter body,它在代码片段中的编码方式,同一行上的括号。你喜欢它的方式。

与VS2015不同,它现在关注工具>选项>文本编辑器> C#>格式化>新行> “在方法的新行上放置开括号”设置。您可以选择“埃及”牙箍或将开口支撑分开。你喜欢哪一种。

微软创建新的VS版本时会发生意外,这不是偶然的。这是否由“大众需求”完成很难进行逆向工程,我认为很可能因为这种重构通常是为了编写一个非平凡的getter或setter,这种类型不适合单行。为我们提供所有三种可能的格式化首选项之间的选择对我来说是一个问题,现有的格式选项不是很好的匹配。

唯一真正的选择是让Microsoft知道您对此更改不满意。有an existing UserVoice article提出改变。您可以投票或自己编写。在您的问题中发布一个链接,以便其他SO用户可以投票。

答案 1 :(得分:0)

这会对你有所帮助:
-Encapsulate Field Refactoring(C#): https://msdn.microsoft.com/en-us/library/a5adyhe9.aspx

这个网站似乎提供了一个解决方案的主题。

还查看这篇文章: - 用于字段封装的不同重构样式:如何使Visual Studio更改它? Different Refactoring style for field encapsulation: how to make Visual Studio change it?

这个问题以某种方式与您的问题相对应:问题与您的问题有关:)

答案 2 :(得分:0)

我本人曾尝试更改代码段文件以适合我的文件,但VS无效。我最终要做的是

  1. 照常封装字段。
  2. 将代码复制并粘贴到notepad ++中,然后执行“查找并替换”。

查找:

(\{)*(\s*)*(get|set)\r\n\s+{\r\n\s+(.*)\r\n\s+\}\s+

替换为:

$1$3\{$4\}
  1. 将结果粘贴回VS。 VS会将其格式化为“在一行上保留块”。