4

这会引发 FormatException:

Console.WriteLine("strict digraph {0}\n{", project.ProjectName);

但这很好:

Console.WriteLine("strict digraph {0}\n", project.ProjectName);

我需要结尾的 '{' 并且\{不是有效的转义码。我的代码到底有什么问题,我该如何让它工作?

4

1 回答 1

8

您需要用另一个大括号来转义大括号:

Console.WriteLine("strict digraph {0}\n{{", project.ProjectName);

有关更多信息,请查看相关的 MSDN 文章Composite Formatting及其“Escaping Braces”部分。

是说

左大括号和右大括号被解释为格式项的开始和结束。因此,您必须使用转义序列来显示文字左大括号或右大括号。在固定文本中指定两个左大括号(“{{”)以显示一个左大括号(“{”),或两个右大括号(“}}”)以显示一个右大括号(“}”)。格式项中的大括号按照遇到的顺序依次解释。不支持解释嵌套大括号。

但请注意。这可能会导致意外行为:以格式字符串{{{0:D}}}为例。例如,它应该输出“{10}”,不是吗?它应该,但它没有。上面的 MSDN 文章链接指出

  1. 前两个左大括号(“{{”)被转义并产生一个左大括号。
  2. 接下来的三个字符(“{0:”)被解释为格式项的开始。
  3. 下一个字符(“D”)将被解释为 Decimal 标准数字格式说明符,但接下来的两个转义大括号(“}}”)产生一个大括号。因为结果字符串 ("D}") 不是标准的数字格式说明符,所以结果字符串被解释为自定义格式字符串,这意味着显示文字字符串 "D}"。
  4. 最后一个大括号 ("}") 被解释为格式项的结尾。
  5. 显示的最终结果是文字字符串“{D}”。不显示要格式化的数值。

为了规避 MSDN 建议使用以下代码:

var result = string.Format("{0}{1:D}{2}", "{", 10, "}");
于 2013-02-11T17:07:38.143 回答