1192

How can brackets be escaped in using string.Format?

For example:

String val = "1,2,3"
String.Format(" foo {{0}}", val);

This example doesn't throw an exception, but it outputs the string foo {0}.

Is there a way to escape the brackets?

3
  • 2
    MSDN String Formatting FAQ msdn.microsoft.com/en-us/netframework/aa569608: How do I write out a curly bracket in string formats? Do escaped curly brackets have any odd behaviors I need to be aware of? How can I use string formatting to write out something like "{42.00}"? Commented Nov 5, 2011 at 9:30
  • 3
    Unfortunately, the above MSDN link is broken. Currently, the correct link seems to be msdn.microsoft.com/en-us/library/… (seet the QA section at the bottom, or search for "escape" on the page). Commented Apr 14, 2017 at 5:21
  • Came here when looking for a double curly brackets in a raw string. The solution: if you need 2 curly brackets in a string, you have to use 3 dollars, example: $$$"""\n{ "key": "{{value}}" }\n""", meaning that for a variable you would use 3 curly brackets (e.g. {{{variable}}}) . If you need 3 curly brackets in a string, use 4 dollars. Commented Apr 28, 2023 at 13:28

13 Answers 13

1502

For you to output foo {1, 2, 3} you have to do something like:

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);

To output a { you use {{ and to output a } you use }}.

Or now, you can also use C# string interpolation like this (a feature available in C# 6.0)

Escaping brackets: String interpolation $(""). It is new feature in C# 6.0.

var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
// The output will be:  foo {1, 2, 3}
Sign up to request clarification or add additional context in comments.

5 Comments

"{{" is treated as the escaped bracket character in a format string.
But if you want to add value formatting to your string specifier you need also to read the answer from Guru Kara below.
Read the section Escaping Braces in the official documentation Composite Formatting.
It's also working in new C# 6 string interpolation ($"a = {{ {a} }}")
More specific on the C# 6 string interpolation way, doubling up on the curly works like so string v = $" foo {{{t}}}";. If you has other characters to escape that's not a curly you can use the $@ combo string v2 = $@"\foo {{{t}}}\";
234

Yes, to output { in string.Format you have to escape it like this: {{

So the following will output "foo {1,2,3}".

String val = "1,2,3";
String.Format(" foo {{{0}}}", val);

But you have to know about a design bug in C# which is that by going on the above logic you would assume this below code will print {24.00}:

int i = 24;
string str = String.Format("{{{0:N}}}", i); // Gives '{N}' instead of {24.00}

But this prints {N}. This is because the way C# parses escape sequences and format characters. To get the desired value in the above case, you have to use this instead:

String.Format("{0}{1:N}{2}", "{", i, "}") // Evaluates to {24.00}

Reference Articles

2 Comments

If I ran into that bug, I'd write string.Format( "{{{0}}}", i.ToString("N") ); which may be more readable to some.
@Happy It might, but you'd then find yourself specifying the FormatProvider twice, with the risk that you'd specify different ones, or miss one.
86

Almost there! The escape sequence for a brace is {{ or }} so for your example you would use:

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);

Comments

26

You can use double open brackets and double closing brackets which will only show one bracket on your page.

Comments

20

I came here in search of how to build JSON strings ad-hoc (without serializing a class/object) in C#. In other words, how to escape braces and quotes while using Interpolated Strings in C# and "verbatim string literals" (double quoted strings with '@' prefix), like...

var json = $@"{{""name"":""{name}""}}";

Comments

18

Escaping curly brackets and using string interpolation makes for an interesting challenge. You need to use quadruple brackets to escape the string interpolation parsing and string.format parsing.

Escaping Brackets: String Interpolation $("") and String.Format

string localVar = "dynamic";
string templateString = $@"<h2>{0}</h2><div>this is my {localVar} template using a {{{{custom tag}}}}</div>";
string result = string.Format(templateString, "String Interpolation");

// OUTPUT: <h2>String Interpolation</h2>
//           <div>this is my dynamic template using a {custom tag}
//           </div>

Comments

8
[TestMethod]
public void BraceEscapingTest()
{
    var result = String.Format("Foo {{0}}", "1,2,3");  //"1,2,3" is not parsed
    Assert.AreEqual("Foo {0}", result);

    result = String.Format("Foo {{{0}}}", "1,2,3");
    Assert.AreEqual("Foo {1,2,3}", result);

    result = String.Format("Foo {0} {{bar}}", "1,2,3");
    Assert.AreEqual("Foo 1,2,3 {bar}", result);

    result = String.Format("{{{0:N}}}", 24); //24 is not parsed, see @Guru Kara answer
    Assert.AreEqual("{N}", result);

    result = String.Format("{0}{1:N}{2}", "{", 24, "}");
    Assert.AreEqual("{24.00}", result);

    result = String.Format("{{{0}}}", 24.ToString("N"));
    Assert.AreEqual("{24.00}", result);
}

Comments

8

For the raw string literals (which start with 3x double quotes), the above answers won't work but you can work the other way around: You can change the number of curly braces to use in the literal by adding $ at the start. $$""" """ means you need {{ to apply a template value. To answer the OP the below will work:

var formatted = $$"""foo {{{val}}}""";

The output will be:

foo {1, 2, 3}

Fiddle

Comments

5

Or you can use C# string interpolation like this (feature available in C# 6.0):

var value = "1, 2, 3";
var output = $" foo {{{value}}}";

Comments

3

My objective:

I needed to assign the value "{CR}{LF}" to a string variable delimiter.

C# code:

string delimiter= "{{CR}}{{LF}}";

Note: To escape special characters normally you have to use \. For opening curly bracket {, use one extra, like {{. For closing curly bracket }, use one extra, }}.

Comments

2

You can also use it like this:

var outVal = $" foo {"{"}{inVal}{"}"} --- {"{"}Also Like This{"}"}"

Comments

1

Escaping Brackets: String Interpolation $(""):

Now, you can also use C# string interpolation like this (feature available in C# 6.0):

var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
// The output will be:  foo {1, 2, 3}

1 Comment

This seems to be a plagiarised version of Jorge Ferreira's answer and/or Aarif's answer (incl. the spelling mistakes) (original revisions).
1

I wanted to escape {{Id}} while I'm in a string interpolation.

This worked for me:

string url = $"/Details/{{{{Id}}}}";

Output:

/Details/{{Id}}

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.