Cómo escapar de 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 genera una excepción, pero genera la cadena foo {0}
.
¿Hay alguna manera de escapar de los corchetes?
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}
Sí, para generar {
tienes string.Format
que 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
¡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);
Puede utilizar corchetes de apertura doble y corchetes de cierre dobles que solo mostrarán un corchete en su página.
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}""}}";