2016-07-07 9 views
-1

In einer Anwendung lade ich Zeichenfolgen aus der Konfiguration dieses Formats stackoverflow.com?questionId={0}. Offensichtlich werden sie zur Laufzeit gefüllt und in Abfragezeichenfolgen verwendet.Drucken einer Zeichenfolge wie "Hallo {0}"

Ich möchte diese Strings beim Start mit einer Methode zur Anmeldung:

void log(string message, params object[] vars) 
     { 
      string s = String.Format(message, vars); 
      Console.WriteLine(s); 
     } 

jedoch, wie Sie String.Format löst eine Ausnahme erwarten würde, weil Aufruf: log(String.Format("Adding new feed '{0}'", "stackoverflow.com?questionId={0}"))-String.Format versucht {0} innen ‚log()‘ zu ersetzen.

Gibt es eine einfache Möglichkeit, die { Zeichen zu entkommen, so dass keine Substitution versucht wird?

+1

einfach doppelt: '{0} ':' {{0}} ' –

+1

Aber @DmitryBychenko dann, dass die tatsächliche _usage_ bricht ... diese sollen ersetzt werden, nur das Protokollieren von ihnen ist das Problem. –

+1

ah, ich sehe das Dilemma. Du kannst es nicht auf beide Arten haben. Möglicherweise benötigen Sie eine Überladung für Ihre Log-Methode, die keine 'params' enthält und nicht' string.format' aufruft. Gewählt, um wieder zu öffnen, da Sie nicht fragen, "wie ich Platzhalter zitieren", aber "wie tue ich manchmal, dass sie keine Platzhalter sind" – hometoast

Antwort

1

Ich habe zwei Antworten darauf gefunden.

Zunächst floh ich die Klammern durch folgende Maßnahmen:

log(String.Format("Adding new feed '{0}'", feedStr.Replace("{", "{{").Replace("}", "}}")));

Dies funktioniert gut.

Zweitens vorgeschlagen, wie durch MartinBrown mir klar, ich konnte einfach tun:

log("Adding new feed '{0}'", feedStr); 
Verwandte Themen