2010-02-16 13 views
5

Ho appena notato che posso fare quanto segue, che è venuto come una completa sorpresa per me:Quali metodi nel framework 3.5 hanno una firma String.Format?

Console.WriteLine("{0}:{1}:{2}", "foo", "bar", "baz"); 

Questo funziona per il metodo Write troppo. Quali altri metodi hanno le firme che supportano questo, senza richiedere l'uso di String.Format?

Debug.WriteLine non ...
HttpResponse.WriteLine non lo fa ...

(E su un lato nota, non riuscivo a trovare un modo rapido di ricerca di questo con Reflector. Che cosa è un buon modo per cercare firme specifiche)

Edit:?

specificatamente per il framework 3.5.

+0

Non direttamente correlato alla domanda, ma la maggior parte dei metodi 'ToString()' accetta anche la formattazione e può essere più veloce del metodo 'String.Format'. –

+0

Sarebbe bello vedere questo implementato in C#: http://tirania.org/blog/archive/2009/Dec-20.html – RedFilter

risposta

4

Ci sono un sacco di metodi che supportano questa in tutta la struttura. Tutte le sottoclassi di TextWriter (e quindi StreamWriter e StringWriter e le loro sottoclassi) erediteranno il metodo Write che supporta questo.

Un altro esempio che viene spesso utilizzato è StringBuilder.AppendFormat.

È possibile scrivere i propri metodi per supportare anche questo. Puoi farlo da avere un sovraccarico con un parametro di stringa di formato e un altro parametro con la parola chiave params, in questo modo:

public void Foo(string message) { 
    // whatever 
} 

public void Foo(string format, params string[] arg) { 
    Foo(string.Format(format, arg)); 
} 
+0

* Ci sono molti metodi * - come? Quella ** è ** la domanda :) – RedFilter

+1

@Orbman: Siamo spiacenti! È vero, ma altri hanno già suggerito altre 4 buone risposte e non voglio solo plagare le risposte di tutti gli altri nel mio post. Invece ho cercato di fornire alcune informazioni nuove e correlate che potrebbero essere utili a te o qualcun altro qui. :) –

+0

assolutamente! Tutti i contributi sono accettati volentieri :) – RedFilter

4

Le istanze StringBuilder hanno un metodo AppendFormat.

Le istanze StringWriter hanno un overload di scrittura che accetta i parametri di formato.

+0

Interessante come hanno usato un nome di metodo separato per questo, presumo perché altrimenti si scontrerebbe con la firma '(String, Int32, Int32). Mi chiedo perché non hanno standardizzato su questo approccio per coerenza, e invece hanno fatto un metodo 'Debug.WriteLineFormat'. – RedFilter

0

La classe StringBuilder ha un metodo chiamato AppendFormat che si comporta nello stesso modo

Problemi correlati