Comment échapper les crochets en utilisant string.Format
. Par exemple:
String val = "1,2,3"
String.Format(" foo {{0}}", val);
Cet exemple ne génère pas d'exception, mais génère la chaîne foo {0}
Y a-t-il un moyen d'échapper aux crochets?
Pour que vous puissiez sortir foo {1, 2, 3}
vous devez faire quelque chose comme:
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
Pour sortir un {
, vous utilisez {{
et pour sortir un }
, vous utilisez }}
.
Oui pour sortir {
dans string.Format
vous devez l’échapper comme ceci {{
Donc ça
String val = "1,2,3";
String.Format(" foo {{{0}}}", val);
va sortir "foo {1,2,3}"
.
MAIS vous devez connaître un bogue de conception en C # qui signifie qu'en suivant la logique ci-dessus, vous supposeriez que le code ci-dessous sera imprimé {24.00}
int i = 24;
string str = String.Format("{{{0:N}}}", i); //gives '{N}' instead of {24.00}
Mais ceci affiche {N}. En effet, la façon dont C # analyse les séquences d'échappement et les caractères de formatage. Pour obtenir la valeur souhaitée dans le cas ci-dessus, vous devez utiliser ceci à la place.
String.Format("{0}{1:N}{2}", "{", i, "}") //evaluates to {24.00}
Articles de référence String.Format gottach et FAQ sur le formatage des chaînes
Presque là! La séquence d'échappement d'une accolade est {{
ou }}
de sorte que vous utiliseriez pour votre exemple:
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
Vous pouvez utiliser des crochets doubles ouverts et des crochets doubles de fermeture qui n’afficheront qu’un seul crochet sur votre page.
Echapper accolades ET utiliser interpolation de chaîne constitue un défi intéressant. Vous devez utiliser des crochets quadruples pour éviter l'analyse interpolation de chaîne et 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>
Entré ici à la recherche de la façon de construire des chaînes json ad-hoc (sans sérialiser une classe/objet) en C #. En d'autres termes, comment échapper les accolades et les guillemets en utilisant Chaînes interpolées en C # et " littéraux de chaîne textuels " (chaînes entre guillemets avec le préfixe '@'), comme .. .
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);
}
ou vous pouvez utiliser une interpolation de chaîne c # comme ceci (fonctionnalité disponible dans C # 6.0)
var value = "1, 2, 3";
var output = $" foo {{{value}}}";
Mon objectif:
J'avais besoin d'attribuer la valeur "{CR}{LF}"
à une variable string
variable delimiter
.
Code c #:
string delimiter= "{{CR}}{{LF}}";
Remarque: Pour échapper aux caractères spéciaux normalement, vous devez utiliser. Pour ouvrir les accolades {, utilisez un extra comme {{. Pour fermer l’accolade}, utilisez-en une supplémentaire}}.