Pregunta

¿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?

¿Fue útil?

Solución

Para que usted dé salida 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 }}.

Otros consejos

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

Así que esto

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

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

PERO debes conocer un error de diseño en C#, que es que al seguir la lógica anterior asumirías 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, debe usar esto en su lugar.

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

Artículos de referenciaCadena. Formato gottach yPreguntas frecuentes sobre formato de cadenas

¡Casi llegamos!La secuencia de escape para una llave es {{ o }} entonces para tu ejemplo usarías:

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

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

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

Soportes 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>

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

var json = $@"{{""name"":""{name}""}}";
[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);
}

o puede usar la interpolación de cadenas de C# como esta (función disponible en C# 6.0)

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

Mi objetivo:

necesitaba asignar el valor "{CR}{LF}" a un string variable delimiter.

Código c#:

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

Nota:Para escapar de caracteres especiales normalmente hay que utilizar .Para abrir llaves {, use uno adicional como {{.Para cerrar la llave }, utilice un }}.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top