Wie in .NET Klammern (geschweifte Klammern) in einem Format-String zu entkommen
-
01-07-2019 - |
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?
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)
verwendenvar 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}}.