Come sfuggire parentesi graffe (parentesi graffe) in una stringa di formato in .NET
-
01-07-2019 - |
Domanda
Come si può staffe di essere fuggito in uso string.Format
.Per esempio:
String val = "1,2,3"
String.Format(" foo {{0}}", val);
Questo esempio non genera un'eccezione, ma restituisce la stringa foo {0}
C'è un modo per sfuggire le staffe?
Soluzione
Per la produzione di foo {1, 2, 3}
devi fare qualcosa di simile:
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
Per l'uscita di una {
si utilizza {{
e per l'uscita di una }
si utilizza }}
.
Altri suggerimenti
Sì uscita {
in string.Format
si deve sfuggire come questo {{
Quindi questo
String val = "1,2,3";
String.Format(" foo {{{0}}}", val);
in uscita "foo {1,2,3}"
.
MA quello che dovete sapere su un bug di progettazione in C# che è che andando al di sopra di logica si potrebbe pensare questo di seguito codice stampa {24.00}
int i = 24;
string str = String.Format("{{{0:N}}}", i); //gives '{N}' instead of {24.00}
Ma questo stampe {N}.Questo è perché il modo in C# analizza le sequenze di escape e caratteri di formato.Per ottenere il valore desiderato nel caso di cui sopra, è necessario utilizzare questo, invece.
String.Format("{0}{1:N}{2}", "{", i, "}") //evaluates to {24.00}
Articoli Di Riferimento Stringa.Formato gottach e Stringa di Formattazione FAQ
Ci siamo quasi!La sequenza di escape per una coppia {{
o }}
quindi per esempio si usa:
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
È possibile utilizzare le doppie parentesi aperta e doppia chiusura di parentesi che mostra solo una parentesi sulla tua pagina.
La fuga parentesi graffe E l'utilizzo di stringa di interpolazione rende per una sfida interessante.È necessario utilizzare quadrupla staffe per sfuggire alla stringa di interpolazione l'analisi e la string.format
l'analisi di.
La Fuga Tra Parentesi Quadre:Stringa di Interpolazione $("") e una Stringa.Formato
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>
È venuto qui in cerca di come costruire stringhe json ad-hoc (senza la serializzazione di un oggetto di classe in C#.In altre parole, come sfuggire le parentesi e le virgolette durante l'utilizzo di Interpolati Stringhe in C# e "verbatim valori letterali stringa"(virgolette doppie stringhe con '@' prefisso), come...
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);
}
oppure è possibile utilizzare c# stringa di interpolazione come questa (funzione disponibile in C# 6.0)
var value = "1, 2, 3";
var output = $" foo {{{value}}}";
Il mio obiettivo:
Avevo bisogno di assegnare il valore "{CR}{LF}"
per un string
variabile delimiter
.
Codice c#:
string delimiter= "{{CR}}{{LF}}";
Nota:Per l'escape dei caratteri speciali, normalmente, è necessario utilizzare .Per l'apertura di parentesi graffe {, utilizzare uno di extra, come {{.Per la chiusura della parentesi graffa }, utilizzare uno extra }}.