Scott Chamberlain
Scott Chamberlain

Reputation: 127543

How to get String.Format not to parse {0}

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?

Upvotes: 2

Views: 332

Answers (5)

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

Upvotes: 3

Florian Reischl
Florian Reischl

Reputation: 3856

Use double curly braces:

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

Upvotes: 13

James Curran
James Curran

Reputation: 103495

String.Format(\"{0} = '{{0}}'\",

Upvotes: 1

Matthew Flaschen
Matthew Flaschen

Reputation: 284796

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

Upvotes: 3

Dirk Vollmar
Dirk Vollmar

Reputation: 176169

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

Upvotes: 7

Related Questions