views:

136

answers:

5

I am writing a code generation tool that frequently will have lines like

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);

However the issue I am having is when I run in to a line like this.

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

I want the first {0} to turn in to whatever the value of columnName is but I want the seccond {0} to be left alone so the internal String.Format will process it correctly.

How do I do this?

+13  A: 

Use double curly braces:

string result = string.Format("{{Ignored}} {{123}} {0}", 543);
Florian Reischl
+7  A: 

Curly braces can be escaped by using two curly brace characters. The documentation of string.Format states:

To specify a single literal brace character in format, specify two leading or trailing brace characters; that is, "{{" or "}}".

In your example that would be

sp.AppendFormat("return String.Format(\"{0} = '{{0}}'\",cmbList.SelectedValue);", 
    columnName);
0xA3
+3  A: 
sp.AppendFormat("return String.Format(\"{0} = '{{0}}'\", cmbList.SelectedValue);", columnName);
Matthew Flaschen
+1  A: 
String.Format(\"{0} = '{{0}}'\",
James Curran
+3  A: 

Use "{{0}}". This will result in the string "{0}"

Martin Ingvar Kofoed Jensen