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

¿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 arroja una excepción, pero genera la cadena foo {0}.

¿Hay alguna forma de escapar de los corchetes?

preguntado el 18 de septiembre de 08 a las 08:09

Preguntas frecuentes sobre el formato de cadenas de MSDN msdn.microsoft.com/en-us/netframework/aa569608: ¿Cómo escribo un corchete en formatos de cadena? ¿Los corchetes escapados tienen algún comportamiento extraño del que deba estar al tanto? ¿Cómo puedo utilizar el formato de cadena para escribir algo como "{42.00}"? -

Desafortunadamente, el enlace de MSDN anterior está roto. Actualmente, el enlace correcto parece ser msdn.microsoft.com/en-us/library/… (consulte la sección de control de calidad en la parte inferior o busque "escape" en la página). -

10 Respuestas

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

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

Para generar un { tu usas {{ y para generar un } tu usas }}.

o Ahora, también puede usar la interpolación de cadenas de c # como esta (característica disponible en C # 6.0)

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

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

Respondido 28 Abr '20, 15:04

"{{" se trata como el carácter de corchete de escape en una cadena de formato. - Icelava

Pero si desea agregar formato de valor a su especificador de cadena, también debe leer la respuesta de Guru Kara a continuación. - Nick

Leer la sección Tirantes de escape en la documentación oficial Formateo compuesto. - Jeppe Stig Nielsen

También funciona en la nueva interpolación de cadenas C # 6 ($"a = {{ {a} }}") - mahmoodvcs

Más específico sobre la forma de interpolación de cadenas C # 6, duplicar el rizado funciona así string v = $" foo {{{t}}}";. Si tiene otros personajes para escapar, eso no es un rizado, puede usar el combo $ @ string v2 = $@"\foo {{{t}}}\"; - Nhan

Sí a la salida { in string.Format tienes que escapar así {{

Así que esta

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

saldrá "foo {1,2,3}".

PERO debe saber acerca de un error de diseño en C # que es que al seguir la lógica anterior, asumiría que este código a continuación se 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 que la forma en que C # analiza las secuencias de escape y formatea los caracteres. Para obtener el valor deseado en el caso anterior, debe usar esto en su lugar.

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

Artículos de referencia Obtención de formato de cadena y Preguntas frecuentes sobre el formato de cadenas

Respondido el 21 de Septiembre de 20 a las 09:09

Si me encontrara con ese error, escribiría string.Format( "{{{0}}}", i.ToString("N") ); que puede ser más legible para algunos. - HappyNomad

@Happy Podría, pero luego se encontrará especificando el FormatProvider dos veces, con el riesgo de que especifique otros diferentes o se pierda uno. - ClickRick

¡Casi llegamos! La secuencia de escape para un corsé es {{ or }} entonces, para tu ejemplo, usarías:

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

Respondido 13 Feb 13, 15:02

Puede usar corchetes dobles abiertos y corchetes dobles de cierre que solo mostrarán un corchete en su página.

Respondido 26 ago 11, 21:08

Escapando llaves Y usando interpolación de cuerdas lo convierte en un desafío interesante. Necesitas usar corchetes cuádruples para escapar del interpolación de cuerdas análisis y string.format análisis.

Corchetes de escape: Interpolación de cadenas $ ("") y 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>

Respondido el 20 de junio de 17 a las 20:06

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 usa Cadenas interpoladas en C # y "literales de cadena textuales"(cadenas entre comillas dobles con el prefijo '@'), como ...

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

Respondido el 06 de junio de 17 a las 21:06

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

contestado el 06 de mayo de 16 a las 17:05

o puede usar la interpolación de cadenas de c # como esta (característica disponible en C # 6.0)

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

Respondido el 03 de enero de 18 a las 16:01

Corchetes de escape: Interpolación de cadenas $ (""):

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

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

Respondido 11 Oct 19, 15:10

Mi objetivo:

Necesitaba asignar el valor "{CR}{LF}" a una string variable delimiter.

Código c #:

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

Nota: Para escapar de los caracteres especiales, normalmente debe usar. Para abrir corchetes {, use uno adicional como {{. Para cerrar corchetes}, utilice un}} adicional.

Respondido 11 Abr '19, 17:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.