【问题标题】:Why does Visual Studio create double closing brackets for C#6 interpolated strings?为什么 Visual Studio 为 C#6 插值字符串创建双右括号?
【发布时间】:2015-11-28 12:04:49
【问题描述】:

在 Visual Studio 2015 中,当我通过键入左大括号“{”在变量中写入插值字符串时,可以实现以下目标:

var a = $"{}";

会自动插入第二个结束括号,颜色为红色或粉红色

var a = $"{}}"

在括号 '{}' 内插入变量并尝试编译后,Visual Studio 抛出错误:“CS8086: '}' 字符必须在插值字符串中进行转义(通过加倍)。”。这是有道理的,但根本不能解释为什么第二个'}'首先出现!我不想写一个'}'字面字符;我只是想写一个常规的插值字符串——一个'}'对应一个'{'。每次我去使用插值字符串时,为了编译成功,我都不得不手动删除这个异常的第二个右括号。

最奇怪的是,它似乎并不总是发生。如果您从插值字符串中删除“{}}”并再次输入单个“{”,您将得到“{}” - 正如您一开始所期望的那样。

这种行为是怎么回事?

【问题讨论】:

  • 这不是题外话。帮助中心明确表示问题可能包括“程序员常用的软件工具”
  • VS2015 RTM 有很多编辑器错误和怪癖,但这不是其中之一。您必须寻找执行此操作的加载项并向所有者提交错误。

标签: c# visual-studio-2015


【解决方案1】:

这是由 Resharper 引起的。

你可以去证明这一点

工具 |选项 |锐化 |一般 |立即暂停

然后再试一次。额外的} 不会出现。 (我尝试使用 R# 10.0)

我一直在通过在 R# 插入一个额外的} 后按 ^Z 来解决这个问题,但这仍然有点烦人。

我想这应该在 R# 网站上报告为一个错误(除非它已经在最近的版本中得到修复)。

[编辑] 我已将其报告为 the Resharper forums 上的错误。一旦模组批准了我的错误报告,它就会出现在那里。

【讨论】:

  • 在 ReSharper 选项 -> 环境 -> 编辑器 -> 编辑器行为下禁用“自动插入右大括号”似乎可以解决这个问题,但奇怪的是我发现一般自动关闭大括号插入没有区别-禁用此选项后的行为(对于大括号,在工具 -> 选项 -> 文本编辑器 -> C# -> 常规下有一个 Visual Studio 设置“自动大括号完成”,这可能与 ReSharper 的设置冗余)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 2021-10-10
  • 2023-03-25
  • 1970-01-01
  • 2021-07-28
相关资源
最近更新 更多