Cómo escapar de llaves (llaves) en una cadena de formato en .NET
-
01-07-2019 - |
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?
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 }}.