it-swarm-eu.dev

Jak uniknout složené závorky (složené závorky) ve formátu řetězce v .NET

Jak lze v závorce uniknout pomocí string.Format. Například:

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

Tento příklad nevyvolává výjimku, ale vydává řetězec foo {0}

Existuje způsob, jak uniknout závorkám?

924
Pop Catalin

Pro výstup foo {1, 2, 3} musíte udělat něco jako:

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

Pro výstup { použijte {{ a pro výstup } použijte }}.

1218
Jorge Ferreira

Ano pro výstup { v string.Format musíte uniknout takhle {{

Takže tohle

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

bude výstup "foo {1,2,3}".

VUT v Brně však musíte vědět o konstrukční chybě v C #, což znamená, že pokud použijete výše uvedenou logiku, předpokládáte, že se následující kód vytiskne {24.00}

int i = 24;
string str = String.Format("{{{0:N}}}", i); //gives '{N}' instead of {24.00}

Ale toto vytiskne {N}. Je to proto, že způsob C # analyzuje únikové sekvence a formátovací znaky. Chcete-li získat požadovanou hodnotu ve výše uvedeném případě, musíte ji použít.

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

Referenční články String.Format gottach a FAQ pro formátování řetězců

199
Guru Kara

Téměř tam! Úniková sekvence pro vzpěru je {{ nebo }}, takže jako příklad byste použili:

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

Můžete použít dvojité otevřené závorky a dvojité závorky, které na vaší stránce zobrazí pouze jednu závorku.

22
elec

Únik složené závorky A použití řetězcová interpolace je zajímavá výzva. Musíte použít čtyřnásobné závorky , abyste se vyhnuli analýze řetězcová interpolace a string.format.

Únikové závorky: String Interpolation $ ("") a String.Format

string localVar = "dynamic";
string templateString = [email protected]"<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>
12

Přišel sem při hledání toho, jak vytvořit řetězce json ad-hoc (bez serializace třídy/objektu) v C #. Jinými slovy, jak uniknout složené závorky a uvozovky při použití Interpolované řetězce v C # a " doslovné řetězcové literály " (dvojité řetězce s předponou '@'), jako .. .

var json = [email protected]"{{""name"":""{name}""}}";
6
Adam Cox
[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);
}
5
pomber

nebo můžete použít řetězovou interpolaci c # (funkce je k dispozici v C # 6.0)

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

Můj cíl:

Potřeboval jsem přiřadit hodnotu "{CR}{LF}" k proměnné stringdelimiter.

Kód c #:

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

Poznámka: Chcete-li obvykle uniknout zvláštním znakům, musíte použít. Pro otevření složené závorky {použijte jednu navíc jako {{. Pro zavření složené závorky} použijte jednu další}}.

0
Goldfish