2010-07-23 81 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}”