2013-02-11 59 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, "}"); 
相關問題