为什么Visual Studio为C#6插值字符串创建双重括号?

lor*_*lko 7 c# visual-studio-2015

在Visual Studio 2015中,当我通过键入一个左大括号'{'来在变量中编写插值字符串时,实现以下内容:

var a = $"{}";
Run Code Online (Sandbox Code Playgroud)

第二个结束括号自动插入,红色或粉红色,如此

var a = $"{}}"
Run Code Online (Sandbox Code Playgroud)

在括号'{}'中插入变量并尝试编译之后,Visual Studio会抛出一个错误:"CS8086:A'}'字符必须在插值字符串中进行转义(通过加倍)." 这是有道理的,但根本没有解释为什么第二个'}'出现在第一位!我不想写一个'}'字面字符; 我只想写一个常规插值字符串 - 一个'}'用于一个'{'.每次我使用插值字符串时,我都被迫手动删除这个异常的第二个右括号,以便成功编译.

最奇怪的是,它似乎并不是一直发生的.如果您从插值字符串中删除"{}}"并再次键入单个"{",则最终会得到"{}" - 就像您在第一时所期望的那样.

这种行为怎么了?

Mat*_*son 7

这是由Resharper引起的.

你可以通过去证明这一点

工具| 选项| ReSharper | 一般| 暂停

然后再试一次.额外的}不会出现.(我试过R#10.0)

我已经在R#插入一个额外的东西后按^ Z来解决这个问题},但它仍然有点烦人.

我想这应该被报告为R#网站上的一个错误(除非它已经被最新版本修复).

[编辑]我已经将它报告为Resharper论坛一个错误.一旦mod批准,我的错误报告就会出现在那里.

  • 在ReSharper选项 - >环境 - >编辑器 - >编辑器行为下禁用"自动插入右括号"似乎可以解决此问题,但奇怪的是,在禁用此选项后,我发现通用自动关闭括号插入行为没有区别(对于大括号在工具 - >选项 - >文本编辑器 - > C# - >常规下有一个Visual Studio设置"自动大括号完成",这可能是ReSharper设置的冗余 (3认同)