2013-05-03 73 views
10

C'è qualche differenza tra l'uso di {0} e + quanto entrambi stanno facendo lo stesso lavoro di stampa del lunghezza sullo schermo:Qual è la differenza tra {0} e +?

Console.WriteLine("Length={0}", length); 
Console.WriteLine("Length=" + length); 
+2

Non c'è differenza nel risultato finale, ma c'è sicuramente una differenza nel modo in cui viene raggiunta. –

+0

Sì, C# è sensibile al maiuscolo/minuscolo, quindi non è possibile stabilire se Lunghezza è diverso dalla lunghezza. –

+1

Ma se si desiderano maggiori informazioni, la prima riga avrà Lunghezza = {0} nel Pool interno, ma nella seconda Lunghezza sarà nel Pool interno. –

risposta

1

C'è una differenza.

es:

Console.WriteLine("the length is {0} which is the length", length); 
Console.WriteLine("the length is "+length+" which is the length"); 

+ concatena due stringhe, {0} è un segnaposto per una stringa da inserire.

+1

C'è davvero * una differenza tra la concatenazione e l'inserimento? L'unica differenza che vedo è la convenienza. – Daniel

+2

Direi * formati * invece di * inserti *, poiché in realtà fa un 'String.Format (...)'. –

+0

@Daniel Penso che valga la pena fare una distinzione, altrimenti alcune persone potrebbero avere l'impressione che si possa usare la sintassi del segnaposto '{0}' ovunque *. Ma puoi usarlo solo con metodi che hanno in particolare un codice per interpretare la formattazione della stringa. –

0

{n} dove n >= 0 consente di sostituire i valori in ordine di occorrenza nella stringa.

string demo = "demo", example = "example"; 
Console.WriteLine("This is a {0} string used as an {1}", demo, example); 

+ consente di concatenare due o più stringhe insieme.

Console.WriteLine("This is a " + demo + " string used as an " + example); 
+0

Il concatenato si concluderà in questo modo: 'string.Concat (" Questa è una stringa ", demo," usata come "esempio"; "dopo che il compilatore ha finito con esso. – asawyer

2

La seconda riga crea una stringa e stampa la stringa. La prima riga utilizzerà composite formatting, come stringa.Formato.

Here sono alcuni buoni motivi per utilizzare la formattazione composita.

1

{n} è un segnaposto che può essere utilizzato con più opzioni. dove n è un numero

Nel tuo esempio farebbe la differenza e il risultato finale sarebbe lo stesso che è la concatenazione di due stringhe. Tuttavia, in qualcosa come

var firstName = "babba"; 
var lastName ="abba"; 
var dataOfBirth = new Date(); 

Console 
    .Write(" Person First Name : {0} | Last Name {1} }| Last Login : {2:d/M/yyyy HH:mm:ss}", 
      firstName, 
      secondName, 
      dateOfBirth); 

fornisce un facile leggere l'interfaccia con un facile formattazione

30

Nel tuo esempio banale non c'è alcuna differenza. Ma ci sono ottimi motivi per preferire l'opzione formattata ({0}): semplifica notevolmente la localizzazione del software internazionale e rende molto più semplice la modifica delle stringhe esistenti da parte di terzi.

Immaginate per esempio, si sta scrivendo un compilatore che produce questo messaggio di errore:

"Cannot implicitly convert type 'int' to 'short'" 

Vuoi davvero scrivere il codice

Console.WriteLine("Cannot implicitly convert type '" + sourceType + "' to '" + targetType + "'"); 

? Buon Dio no.Volete mettere questa stringa in una risorsa:

"Cannot implicitly convert type '{0}' to '{1}'" 

e poi scrivere

Console.WriteLine(FormatError(Resources.NoImplicitConversion, sourceType, targetType)); 

perché allora si ha la libertà di decidere che si desidera cambiare la situazione a:

"Cannot implicitly convert from an expression of type '{0}' to the type '{1}'" 

O

"Conversion to '{1}' is not legal with a source expression of type '{0}'" 

Queste scelte possono essere fatte in seguito, dai maggiori inglesi, senza richiedere modifiche al codice.

È anche possibile tradurre tali risorse in altre lingue, nuovamente senza modificare il codice.

Iniziare sempre ad utilizzare le stringhe di formattazione ora; quando hai bisogno di scrivere un software localizzabile che usi correttamente le risorse stringa, avrai già l'abitudine.

+0

Grazie per la spiegazione – AK1

+1

L'argomento migliore che ho visto per l'utilizzo delle stringhe di formattazione durante i 5 anni di lettura di StackOverflow e in precedenza del blog di Joel. – bricklayer137

Problemi correlati