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?

È stato utile?

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 }}.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top