【问题标题】:Did C# formatting change in Visual Studio 2015? And how can I change it back?Visual Studio 2015 中的 C# 格式是否发生了变化?我怎样才能把它改回来?
【发布时间】:2015-08-11 19:11:44
【问题描述】:

在过去的 Visual Studio 版本中,我可以像这样在 C# 中创建单行自动属性:

public int Whatever { get; set; }

如果我按 Control-K、Control-D 进行格式化,属性将保持不变。

但在 Visual Studio 2015 RC 中,当我键入属性时,它会换行,即使我打开它,格式化也会再次换行:

public int Whatever
{ get; set; }

我在构造函数中也注意到了这一点。过去,空的构造函数(例如,刚刚调用基类构造函数)可能如下所示:

public Whatever(int stuff)
    : base(stuff) { }

现在 Visual Studio 2015 坚持这样做:

public Whatever(int stuff)
    : base(stuff)
{ }

其他人注意到了吗?这是在 Visual Studio 2015 中所做的更改吗?如果是这样,有什么办法可以改回来吗?我查看了工具 > 选项的 C# 格式化部分,但找不到任何可能影响此的新设置。

(我的加载项之一导致它并非不可能,但我没有发现任何明显的罪魁祸首。)

(为什么还要在意?因为当我使用 Collapse to Definitions 大纲命令时,单行属性和构造函数保持原样,而包裹的属性和构造函数会折叠。如果它们折叠了,我无法判断一看它们是空的;我必须将它们切换到未折叠状态才能看到那里什么都没有。)

【问题讨论】:

  • 老实说:我不记得 VS 是否这样做,但是 ReSharper 中有一个选项可以解决这个问题,所以如果你正在使用它(也许你还没有使用 VS2015)那么这可能是罪魁祸首- 现在不能说,因为这次我还没有玩新版本 - 也许当它到达 RTM 时
  • 先生,vs15是哪个版本的?
  • @utility 这对新的有影响吗?所有 AFAIK 的格式过去都是相同的
  • @Carsten,我没有使用 Resharper。我确实使用了 CodeRush,但我已经使用了很长时间了,而且似乎并没有造成这种情况。
  • 我已经发布了关于这个问题的 UserVoice 建议:Empty braces are no longer formatted correctly with the FormatDocument command。如果您在这里找到了自己的方式,因为这个问题也困扰着您,请考虑为它投票。

标签: c# visual-studio-2015


【解决方案1】:

转到工具 > 选项 > 文本编辑器 > C# > 格式化 > 换行

勾选“将块放在单行”和“将语句和成员声明放在同一行”

【讨论】:

  • 请注意,如果您没有选中第二个框,这将毫无帮助。仅选中第一个框后,VS2015 将在 int Foo { get; set; } 的中间直接在 'Foo' 之后放置一个新行
  • 不幸的是,这在输入属性时没有帮助。一旦属性在单行上,它将保持在单行上。你可以做的是在你输入“get;”之后。点击 ctrl+z 撤消格式化并像往常一样继续。
  • @AlexJorgenson Ctrl+Z 很好,但人这样做很糟糕!
  • 我已经更改了解释以反映 VS2015 的行为。
  • 如果在添加 get; set; 之前创建左大括号和右大括号,而不是使用 Ctrl+Z,它不会造成麻烦,您可以避免 Ctrl+Z,这比备份更痛苦恕我直言,如果您的焦点被盗,加上 Ctrl+Z 可能会产生意想不到的副作用。
【解决方案2】:

这种行为似乎已经改变。转到“工具”>“选项”菜单,然后导航到“文本编辑器”>“C#”>“格式”>“换行”。

在 Visual Studio 的早期版本中,如果您选中了“在单行上保留块”并且未选中“在同一行上保留语句和成员声明”,则如果将空大括号放在同一行上,它们将保留在同一行上。

但在 Visual Studio 2015 RC 中,如果您选中了“在单行上保留块”并且未选中“在同一行上保留语句和成员声明”,则空括号将被换行。

您必须检查两个项目以防止大括号缠绕。但这也有其他后果,比如在同一行留下多个语句......

int x = 5; int y = 3;

...这就是为什么我以前从未检查过它。

【讨论】:

  • 唉,这可以防止属性包装,但它不会防止空的构造函数/方法包装。
  • @Kralessa 如果您进入Tools > Options > Text editor > C# > Formatting -> General 并取消选中Automatically format satment on ;,您将可以在一行中输入所有内容,而无需自动换行。我发现这是阻止这种情况的唯一方法。
  • @Matthew,是的,但是如果您稍后格式化整个文件,那么它就会进入糟糕的地方......
猜你喜欢
  • 2014-01-28
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
相关资源
最近更新 更多