2010-07-23 82 views
2

我寫一個代碼生成工具,經常會有像如何獲得的String.Format不解析{0}

StringBuilder sp = new Stringbuilder(); 
sp.AppendFormat("  public {0}TextColumn()\n", className); 
sp.AppendLine("  {" 
sp.AppendLine("   Column = new DataGridViewTextBoxColumn();"); 
sp.AppendFormat("   Column.DataPropertyName = \"{0}\";\n", columnName); 

線但是我遇到的問題是,當我運行像一條線這個。

sp.AppendFormat("return String.Format(\"{0} = '{0}'\", cmbList.SelectedValue);", columnName); 

我希望第一個{0}在轉向無論COLUMNNAME的價值,但我想seccond {0}獨處因此內部String.Format將正確地進行處理。

我該怎麼做?

+0

順便說一下,您是否知道包含在Visual Studio中的用於代碼生成的T4引擎? – 2010-07-23 15:57:22

+0

@ 0xA3不,我不是,它是否適用於rt.click「運行自定義工具」?這就是我正在編寫代碼生成的東西。 – 2010-07-23 15:58:33

+0

這些http://www.codeproject.com/KB/dotnet/customtoolsexp.aspx是我所指的自定義工具。 – 2010-07-23 16:00:49

回答

13

使用雙大括號:

string result = string.Format("{{Ignored}} {{123}} {0}", 543); 
7

大括號可以用兩個大括號字符轉義。的string.Format狀態的文檔:

要指定格式的單個字面括號字符,指定兩個前導或尾隨括號字符;即「{{」或「}}」。

在您的例子,這將是

sp.AppendFormat("return String.Format(\"{0} = '{{0}}'\",cmbList.SelectedValue);", 
    columnName); 
3
sp.AppendFormat("return String.Format(\"{0} = '{{0}}'\", cmbList.SelectedValue);", columnName); 
1
String.Format(\"{0} = '{{0}}'\", 
3

使用 「{{0}}」。這將導致字符串「{0}」