Frage

Wie kann Klammern Sie sich mit der string.Format entwertet werden. Zum Beispiel:

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

Dieses Beispiel wirft keine Ausnahme, sondern gibt die Zeichenkette foo {0}

Gibt es eine Möglichkeit, die Klammern zu entkommen?

War es hilfreich?

Lösung

Für Sie ausgeben foo {1, 2, 3} Sie tun müssen, um so etwas wie:

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

Zur Ausgabe eines { Sie {{ verwenden und zur Ausgabe eines } Sie }} verwenden.

Andere Tipps

Ja, um Ausgang { in string.Format Sie es wie dieser {{ entkommen müssen

So this

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

Wille Ausgang "foo {1,2,3}".

Sie haben über ein Design-Fehler in C # wissen, was das auf der obigen Logik, indem Sie ist, dass Sie dies unter Code würde davon ausgehen, druckt {24,00}

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

Aber diese Drucke {N}. Dies liegt daran, die Art und Weise C # entkommen parst Sequenzen und Formatzeichen. Um den gewünschten Wert im obigen Fall erhalten Sie diese verwenden, anstatt.

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

Referenz Artikel String.Format gottach und String Formatierung FAQ

Fast da! Die Escape-Sequenz für eine Klammer ist {{ oder }} so für Ihr Beispiel verwenden Sie:

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

Sie können mit Doppel offene Klammern und Doppelschließbügel, die nur eine Klammer auf Ihrer Seite zeigen wird.

Escaping geschweiften Klammern und mit string Interpolation sorgt für eine interessante Herausforderung. Sie müssen mit vervierfachen Klammern string Interpolation Parsing und string.format Parsing zu entkommen.

Escaping Brackets: String Interpolation $ ( "") und 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>

Wir waren hier auf der Suche nach, wie JSON-Strings ad-hoc bauen (ohne eine Klasse / Objekt Serialisierung) in C #. Mit anderen Worten, wie Klammern und Anführungszeichen zu entkommen, während Sie Interpolated Strings in C # und" wörtlich Stringliterale “(doppelte Anführungszeichen mit '@' prefix), wie ...

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);
}

oder können Sie c # String-Interpolation wie diese (Funktion in C # 6.0)

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

Mein Ziel:

Ich brauchte den Wert "{CR}{LF}" zu einer string Variable delimiter zuzuweisen.

Code-c #:

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

Hinweis: Sonderzeichen zu entkommen normalerweise müssen Sie verwenden. Für geschweifte Klammer Öffnen {Verwenden Sie eine Extra wie {{. Für geschweifte Klammer zu schließen}, eine extra verwenden}}.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top