2013-02-11 66 views
4

这将引发出现FormatException:的WriteLine字符串 '{' 字符抛出出现FormatException在C#

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

但是,这是罚款:

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

我需要最后的 '{' 和\{不是有效的转义码。我的代码究竟有什么问题,我如何使它工作?

+0

'Console.WriteLine( “严格二合字母{0} \ N {{”,project.ProjectName);' – Jodrell 2013-02-11 17:08:10

+0

除了下面的答案之外,这里是关于“复合格式化”的MSDN文章(相关部分是一种方法,“Escaping Braces”)http://msdn.microsoft.com/en-us/library/txafckwd.aspx – 2013-02-11 17:10:33

回答

7

你就需要使用其它的花括号逃脱花括号:

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

欲了解更多信息,看看相关的MSDN文章Composite Formatting及其部分“转义大括号”。

是指出

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

但是介意你。这可能会导致意外的行为:以格式字符串{{{0:D}}}为例。它应该输出“{10}”为例,不是吗?它应该,但它不。上述MSDN-物品林克指出

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

为了规避该MSDN表明,使用以下代码:

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