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);
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);
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.
C'è davvero * una differenza tra la concatenazione e l'inserimento? L'unica differenza che vedo è la convenienza. – Daniel
Direi * formati * invece di * inserti *, poiché in realtà fa un 'String.Format (...)'. –
@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. –
{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);
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
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.
{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
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.
Grazie per la spiegazione – AK1
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
Non c'è differenza nel risultato finale, ma c'è sicuramente una differenza nel modo in cui viene raggiunta. –
Sì, C# è sensibile al maiuscolo/minuscolo, quindi non è possibile stabilire se Lunghezza è diverso dalla lunghezza. –
Ma se si desiderano maggiori informazioni, la prima riga avrà Lunghezza = {0} nel Pool interno, ma nella seconda Lunghezza sarà nel Pool interno. –