Domanda

Nei miei primi giorni di programmazione .Net, ho usato string.Format () solo per concatenazioni di stringhe complesse, ad esempio per compilare le stringhe come

Problema con l'ordine del cliente 234 di data 2/2/2002 e il pagamento id 55543.

Ma ora io uso string.Format per quasi ogni concatenazione di stringhe che devo fare, anche quelli semplici come prefisso una stringa con qualcosa.

Console.WriteLine(string.Format("\t\t{0}", myString));

Esiste un possibile sovraccarico su questo? Forse dovrei utilizzare l'operatore + regolare per fare queste semplici operazioni?

Qual è la tua opinione su questo?

È stato utile?

Soluzione

Per semplici concatenazioni di stringhe utilizzare l'approccio +. E 'chiaro per le cose semplici che non richiedono un formato.

Per le stringhe più complessi che hanno un certo formato e dove è utile mantenere la struttura della stringa e fornire un segnaposto per l'input, utilizzare String.Format.

E sì, c'è un overhead. String.Format utilizza uno StringBuilder sotto le coperte. Semplici concatenazioni di stringhe saranno molto più veloce in questi scenari. Un paio di punti di riferimento e post di blog su questo argomento si possono trovare abbastanza facilmente. Naturalmente tutto dipende dal vostro uso. Se piccoli concats stringa si verificano in un ciclo, allora l'uso ripetuto di String.Format sarà probabilmente più evidente di un concat + semplice. Se si sta costruendo un grande della stringa in un ciclo poi l'esempio classico è quello di preferire StringBuilder e di questioni connesse a concat contro StringBuilder possono essere trovati sul SO.

Modifica Per chiarire, questo serve a ben poco: String.Format("{0}{1}", a, b) poiché non c'è molto formattazione. E 'semplicemente a + b. Purtroppo ho incontrato esempi nel codice di produzione e, non appena la vedo String.Format mi aspetto di vedere qualcosa che deve essere strutturato in un certo modo, non un semplice concat.

OTOH, prendere in considerazione questo numero di telefono: "(" + area + ") " + number + " x" + extension - c'è troppo in corso e non è facile da modificare. In questo caso una String.Format è preferibile: String.Format("({0}) {1} x{2}", area, number, extension). Questo è ancora un esempio banale, ma si ottiene l'idea.

Altri suggerimenti

Ho anche tendono ad utilizzare string.Format sulla maggior parte dell'operazione che hanno bisogno di due o più stringhe / valori da combinare in quanto produce più facile da leggere il codice di avvio e l'arresto stringhe con 's + nel mezzo.

Per espandere

string value = string.Format("Hello {0}", user.username);

è molto più leggibile ed espandibile che

string value = "Hello" + user.username

Per esempio, se si vuole aggiungere l'ultima data di accesso come un aggiornamento del sistema, si potrebbe semplicemente espandere il codice al seguente

string value = string.Format("Hello {0}, you last logged in {1}", user.username, user.lastLogin);

semplice concatenazione è più efficiente per le cose semplici. Utilizzare String.Format() per quando le cose si fanno più complicate e rende il codice più facile da leggere.

Io personalmente faccio la stessa cosa (a patto che la funzione Sto chiamando non gestisce la formattazione per me).


Clarrification

Per regolare la concatenazione di stringhe come "Hello " + "World!"; userei uno StringBuilder. Il vostro esempio formatta la stringa per l'uscita anteponendo due schede ... che considero più come la formattazione.

C'è una differenza tra la formattazione e la concatenazione ... essere attenti a ciò che si utilizza per la quale.


String.Format() utilizza uno StringBuilder internamente in modo la concatenazione sta per essere più efficiente di fare regolare concatenazione di stringhe in ogni caso.

Si potrebbe desiderare di cambiare il vostro esempio dal Console.WriteLine() in grado di gestire la formattazione in sé (senza String.Format() necessario):

Console.WriteLine("\t\t{0}", myString);

La mia regola è che se devo usare il + (concatenamento) più di una volta lo cambio ad un string.Format.

string a = "Something: " + x;   // ok

string b = "Something: " + x + " something else"; // change it to a string.Format
string bB = string.Format("Something: {0} something else", x); // much nicer to read

string c = "Something: " + x + " " + y + " " + z;  // Yuck
string cC = string.Format("Something: {0} {1} {2}", x, y, x);  // Much nicer

Non so circa le prestazioni, qualcuno probabilmente dispongono che i dati, ma la mia sensazione è che String.Format è la strada da percorrere se si vuole mettere la stringa di formato nel file di configurazione (o file di campo del database o una risorsa o qualsiasi altra cosa). In questo modo, se si desidera modificare il numero di schede, passare a spazi, aggiungere delimitatori, o qualsiasi altra cosa, non dovete ricompilare.

Io tendo ad usare String.Concat invece di String.Format quando ho solo bisogno di prefisso o suffisso una data stringa. Io preferisco la chiamata esplicita al Concatmethod quindi di utilizzare l'operatore + e se si utilizza già String.Format E 'solo una questione di passare una battitura.

IIRC, il metodo String.Concat sarà lo stesso che utilizzare l'operatore in modo da essere anche più veloce di String.Format.

Io uso quasi sempre formato, anche se uso un metodo di estensione anziché il metodo stringa statica. Trovo più facile da capire, facile da cambiare, e generalmente più facile da mantenere. Si può anche fare la localizzazione più facile perché non introduce questioni di ordinamento il modo in cui la concatenazione fa.

Onestamente, che ha un aspetto migliore?

"You have {0} widgets.".Frmt(widgetCount)
"You have " + widgetCount.ToString() + " widgets."
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top