包含'{'字符的WriteLine字符串在C#中抛出FormatException

时间:2013-02-11 17:06:35

标签: c# .net-2.0

抛出FormatException:

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

但这很好:

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

我需要尾随'{'而\{不是有效的转义码。我的代码究竟出了什么问题?如何使其正常工作?

1 个答案:

答案 0 :(得分:7)

您需要通过另一个大括号转义大括号:

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

有关详细信息,请查看相关的MSDN文章Composite Formatting及其“转义大括号”部分。

状态

  

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

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

  
      
  1. 前两个开口大括号(“{{”)被转义并产生一个开口支撑。
  2.   
  3. 接下来的三个字符(“{0:”)被解释为格式项的开头。
  4.   
  5. 下一个字符(“D”)将被解释为十进制标准数字格式说明符,但接下来的两个转义大括号(“}}”)会产生一个大括号。由于结果字符串(“D}”)不是标准数字格式说明符,因此结果字符串将被解释为自定义格式字符串,表示显示文字字符串“D}”。
  6.   
  7. 最后一个大括号(“}”)被解释为格式项的结尾。
  8.   
  9. 显示的最终结果是文字字符串“{D}”。将不显示要格式化的数值。
  10.   

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

var result = string.Format("{0}{1:D}{2}", "{", 10, "}");