Cómo escapar de llaves (llaves) en una cadena de formato en .NET

Resuelto Pop Catalin asked hace 16 años • 13 respuestas

¿ Cómo se pueden escapar los corchetes al usar string.Format?

Por ejemplo:

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

Este ejemplo no genera una excepción, pero genera la cadena foo {0}.

¿Hay alguna manera de escapar de los corchetes?

Pop Catalin avatar Sep 18 '08 17:09 Pop Catalin
Aceptado

Para que puedas generar foo {1, 2, 3}tienes que hacer algo como:

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

Para generar un {usa {{y para generar un }usa }}.

O ahora, también puede usar la interpolación de cadenas de C# como esta (una característica disponible en C# 6.0)

Corchetes de escape: interpolación de cadenas $("") . Es una característica nueva en C# 6.0.

var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
// The output will be:  foo {1, 2, 3}
Jorge Ferreira avatar Sep 18 '2008 10:09 Jorge Ferreira

Sí, para generar {tienes string.Formatque escapar de esta manera:{{

Entonces se generará lo siguiente "foo {1,2,3}".

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

Pero debe conocer un error de diseño en C#: al seguir la lógica anterior, asumiría que el siguiente código imprimirá {24.00}:

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

Pero esto imprime {N}. Esto se debe a la forma en que C# analiza secuencias de escape y formatea caracteres. Para obtener el valor deseado en el caso anterior, debes usar esto en su lugar:

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

Artículos de referencia

  • String.Format te tengo
  • Preguntas frecuentes sobre formato de cadenas
Guru Kara avatar Feb 26 '2013 09:02 Guru Kara

¡Casi llegamos! La secuencia de escape para una llave es más {{o }}menos la que usaría en su ejemplo:

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
Wolfwyrd avatar Sep 18 '2008 10:09 Wolfwyrd

Puede utilizar corchetes de apertura doble y corchetes de cierre dobles que solo mostrarán un corchete en su página.

elec avatar Mar 22 '2010 10:03 elec

Vine aquí en busca de cómo construir cadenas JSON ad-hoc (sin serializar una clase/objeto) en C#. En otras palabras, cómo escapar de llaves y comillas mientras se usan cadenas interpoladas en C# y " literales de cadena textuales " (cadenas entre comillas dobles con prefijo '@'), como...

var json = $@"{{""name"":""{name}""}}";
Adam Cox avatar Apr 18 '2017 14:04 Adam Cox