Esercizio - Esaminare le nozioni di base sulla formattazione delle stringhe
- 20 minuti
In questa unità vengono illustrati i metodi per formattare le stringhe per una visualizzazione efficiente, in particolare per i casi che usano più variabili.
Preparare l'ambiente di scrittura del codice
Questo modulo include attività pratiche che illustrano il processo di compilazione ed esecuzione del codice dimostrativo. È consigliabile completare queste attività usando Visual Studio Code come ambiente di sviluppo. L'uso di Visual Studio Code per queste attività consente di acquisire familiarità nella scrittura e nell'esecuzione del codice in un ambiente di sviluppo usato da professionisti di tutto il mondo.
Nota
Se si sono completati altri moduli di Microsoft Learn in questa serie C#, potrebbe essere già stata creata una cartella di progetto per gli esempi di codice. In tal caso, è possibile ignorare la sezione seguente della procedura ed eliminare il codice nel file Project.cs usato per un esercizio precedente.
Aprire Visual Studio Code. Per aprire Visual Studio Code, è possibile usare il menu Start di Windows (o una risorsa equivalente per un altro sistema operativo).
In Visual Studio Code selezionare Apri cartella dal menu File.
Nella finestra di dialogo Apri cartella passare alla cartella Desktop di Windows. Se si dispone di un percorso di cartella in cui si conservano i progetti di codice, è possibile usare tale percorso. Per questo training, l'aspetto importante è avere una posizione facile da individuare e ricordare.
Nella finestra di dialogo Apri cartella, selezionare Seleziona cartella. Se viene visualizzata una finestra di dialogo di sicurezza che chiede se si considerano attendibili gli autori, selezionare Sì.
Nel menu Terminale di Visual Studio Code, selezionare Nuovo terminale. Si noti che un prompt dei comandi nel pannello Terminale visualizza il percorso della cartella corrente. Ad esempio:
C:\Users\someuser\Desktop>Al prompt dei comandi del terminale per creare una nuova applicazione console in una cartella specificata digitare dotnet new console -o ./CsharpProjects/TestProjects e quindi premere INVIO. Questo comando dell'interfaccia della riga di comando .NET usa un modello di programma .NET per creare un nuovo progetto di applicazione console C# nel percorso della cartella specificato. Il comando crea le cartelle CsharpProjects e TestProject e usa TestProject come nome del file
.csproj.Nel pannello ESPLORA RISORSE espandere la cartella CsharpProjects. Verrà visualizzata la cartella TestProject e due file, un file di programma C# denominato Program.cs e un file di progetto C# denominato TestProject.csproj.
Nel pannello ESPLORA RISORSE, per visualizzare il file di codice nel pannello Editor selezionare Program.cs.
Eliminare le righe di codice esistenti. Questo progetto console C# verrà usato per creare, compilare ed eseguire esempi di codice durante questo modulo.
Chiudere il pannello Terminale.
Che cos'è la formattazione composita?
La formattazione composita usa segnaposto numerati all'interno di una stringa. In fase di esecuzione, tutto ciò che si trova all'interno delle parentesi graffe viene risolto in un valore che viene anche passato in base alla relativa posizione.
Questo esempio di formattazione composita usa un metodo Format() predefinito sulla parola chiave con tipo di dati string. Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:
string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);
Se si esegue questo codice, viene visualizzato l'output seguente.
Hello World!
Ci sono alcuni aspetti importanti da tenere presenti in relazione a questo codice.
- Tipi di dati e variabili di un tipo specifico hanno "metodi helper" predefiniti che semplificano determinate attività.
- La stringa letterale
"{0} {1}!"forma un modello, le cui parti vengono sostituite in fase di esecuzione. - Il token
{0}viene sostituito dal primo argomento dopo il modello di stringa, ovvero il valore della variabilefirst. - Il token
{1}viene sostituito dal secondo argomento dopo il modello di stringa, ovvero il valore della variabilesecond.
Nota
Potrebbe sembrare strano iniziare con il numero 0. In realtà si tratta di una prassi molto comune nello sviluppo di software. Ogni volta che è presente una sequenza di elementi che è possibile identificare con un numero, la numerazione inizia in genere da 0.
Aggiornare il codice come segue:
string first = "Hello"; string second = "World"; Console.WriteLine("{1} {0}!", first, second); Console.WriteLine("{0} {0} {0}!", first, second);Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice. Verrà visualizzato l'output seguente:
World Hello! Hello Hello Hello!
Ecco alcune osservazioni relative a questi esempi:
- Nel caso della prima istruzione
Console.WriteLine(), è possibile vedere che i token possono essere disposti in qualsiasi ordine. Il codice di esempio ha{1}prima di{0}. - Per la seconda istruzione
Console.WriteLine(), si noti che i token possono essere riutilizzati con tre istanze di{0}. Inoltre, il secondo argomento variabile,second, non viene usato. Tuttavia, il codice viene comunque eseguito senza errori.
Che cos'è l'interpolazione di stringhe?
L'interpolazione di stringhe è una tecnica che semplifica la formattazione composita.
Invece di usare un token numerato e includere il valore letterale o il nome della variabile in un elenco di argomenti per String.Format() o Console.WriteLine(), è possibile usare semplicemente il nome della variabile all'interno delle parentesi graffe.
Per interpolare una stringa, è necessario anteporre la direttiva
$. Ora, creare gli stessi esempi illustrati in precedenza con l'uso dell'interpolazione di stringhe al posto della formattazione composita. Aggiornare il codice come segue:string first = "Hello"; string second = "World"; Console.WriteLine($"{first} {second}!"); Console.WriteLine($"{second} {first}!"); Console.WriteLine($"{first} {first} {first}!");Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice. Verrà visualizzato l'output seguente:
Hello World! World Hello! Hello Hello Hello!
Nota
Se si esaminano gli esempi di codice nei libri e online, è probabile imbattersi nelle tecniche di formattazione composita e interpolazione di stringhe, ma in genere è preferibile usare l'interpolazione di stringhe.
Formattazione di valuta
È possibile usare la formattazione composita e l'interpolazione di stringhe per formattare i valori per la visualizzazione in base a una lingua e a impostazioni cultura specifiche. Nell'esempio seguente l'identificatore di formato di valuta :C viene usato per presentare le variabili price e discount come valuta. Aggiornare il codice come segue:
decimal price = 123.45m;
int discount = 50;
Console.WriteLine($"Price: {price:C} (Save {discount:C})");
Se il codice viene eseguito in un computer con la lingua di visualizzazione di Windows impostata su "Inglese (Stati Uniti)", verrà restituito l'output seguente.
Price: $123.45 (Save $50.00)
Si noti che l'aggiunta di :C ai token all'interno delle parentesi graffe comporta la formattazione del numero come valuta indipendentemente dal fatto che si usi int o decimal.
Nota
Che cosa accade se il paese o l'area geografica e la lingua non sono noti? Se si esegue il codice precedente nell'editor .NET "in browser", ad esempio in TrydotNet, verrà visualizzato l'output seguente: Price: ¤123.45 (Save ¤50.00). Il simbolo ¤ viene usato al posto del simbolo di valuta del paese/area geografica. Si tratta di un simbolo generico usato per indicare una valuta, indipendentemente dal tipo. Questo simbolo viene visualizzato nell'editor .NET perché non è nota la posizione corrente dell'utente.
Impatto di paese/area geografica e lingua dell'utente sulla formattazione delle stringhe
Cosa accade se si esegue il codice precedente in un computer in Francia con la lingua di visualizzazione di Windows impostata su Francese? In tal caso, viene visualizzato l'output seguente.
Price: 123,45 € (Save 50,00 €)
Il motivo dell'output "€" precedente è che la funzionalità di formattazione della valuta della stringa dipende dall'impostazione del computer locale per le impostazioni cultura. In questo contesto, il termine "impostazioni cultura" si riferisce al paese/area geografica e alla lingua dell'utente finale. Il codice delle impostazioni cultura è una stringa di cinque caratteri che i computer usano per identificare la posizione e la lingua dell'utente finale. Il codice delle impostazioni cultura garantisce che alcune informazioni, ad esempio date e valuta, possano essere presentate correttamente.
Ad esempio:
- Il codice delle impostazioni cultura di un utente che parla inglese negli Stati Uniti è
en-US. - Il codice delle impostazioni cultura di un utente che parla francese in Francia è
fr-FR. - Il codice delle impostazioni cultura di un utente che parla francese in Canada è
fr-CA.
Le impostazioni cultura influiscono sul sistema di scrittura, sul calendario usato, sull'ordinamento delle stringhe e sulla formattazione di date e numeri, ad esempio la formattazione della valuta.
Sfortunatamente, assicurarsi che il codice funzioni correttamente in tutti i computer indipendentemente dal paese/area geografica o dalla lingua dell'utente finale è piuttosto complesso. Questo processo è noto come localizzazione (o globalizzazione). La localizzazione dipende da molti fattori non descritti in questo modulo, ma in poche parole la sintassi di formattazione delle stringhe può usare un formato diverso a seconda delle impostazioni cultura dell'utente.
Formattazione di numeri
Quando si usano dati numerici, è possibile formattare il numero per semplificarne la lettura includendo un separatore per delineare migliaia, milioni, miliardi e così via.
L'identificatore di formato numerico N rende i numeri più leggibili. Aggiornare il codice come segue:
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N} units");
Se si considera uno scenario con impostazioni cultura en-US, l'output restituito sarà il seguente.
Measurement: 123,456.79 units
Per impostazione predefinita, l'identificatore di formato numerico N visualizza solo due cifre dopo il separatore decimale.
Se si vuole visualizzare una maggiore precisione, è possibile aggiungere un numero dopo l'identificatore. Il codice seguente consente di visualizzare quattro cifre dopo il separatore decimale usando l'identificatore N4. Aggiornare il codice come segue:
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N4} units");
Se si considera uno scenario con impostazioni cultura en-US, l'output restituito sarà il seguente.
Measurement: 123,456.7891 units
Formattazione di percentuali
Usare l'identificatore di formato P per formattare le percentuali e arrotondare a 2 posizioni decimali. Aggiungere un numero dopo l'identificatore per controllare il numero di valori visualizzati dopo il separatore decimale. Aggiornare il codice come segue:
decimal tax = .36785m;
Console.WriteLine($"Tax rate: {tax:P2}");
Se si considera uno scenario con impostazioni cultura en-US, l'output restituito sarà il seguente.
Tax rate: 36.79%
Combinazione di approcci di formattazione
Le variabili stringa possono archiviare stringhe create usando le tecniche di formattazione. Nell'esempio yourDiscount seguente i decimali e i relativi risultati matematici vengono formattati e archiviati nella stringa usando la formattazione composita.
Aggiornare il codice come segue.
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
Console.WriteLine(yourDiscount);
Se si considera uno scenario con impostazioni cultura en-US, l'output restituito sarà il seguente.
You saved $7.56 off the regular $67.55 price.
È possibile combinare più stringhe formattate. Compilare il codice precedente concatenando la percentuale calcolata usando l'interpolazione di stringhe anziché la concatenazione inserendo yourDiscount += $"A discount of {(price - salePrice)/price:P2}!"; nel codice nella riga prima di Console.WriteLine().
Nota
Non è necessario usare String.Format() con questo approccio di interpolazione di stringhe.
Aggiornare il codice come segue.
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
yourDiscount += $"A discount of {((price - salePrice)/price):P2}!"; //inserted
Console.WriteLine(yourDiscount);
Se si considera l'unità con impostazioni cultura en-US, l'output restituito sarà il seguente.
You saved $7.56 off the regular $67.55 price. A discount of 11.19%!
Riepilogo
Di seguito sono riportate le considerazioni più importanti emerse in questa unità in relazione alla formattazione delle stringhe:
- Per formattare le stringhe è possibile usare la formattazione composita o l'interpolazione di stringhe.
- Con la formattazione composita si usa un modello di stringa contenente uno o più token di sostituzione nel formato
{0}. Si fornisce anche un elenco di argomenti che vengono messi in corrispondenza con i token di sostituzione in base al relativo ordine. La formattazione composita funziona quando si usastring.Format()oConsole.WriteLine(). - Con l'interpolazione di stringhe, è possibile usare un modello di stringa contenente i nomi delle variabili da sostituire racchiusi tra parentesi graffe. Usare la direttiva
$prima del modello di stringa per indicare che la stringa deve essere interpolata. - Per formattare la valuta, usare un identificatore
:C. - Per formattare i numeri, usare un identificatore
:N. Per controllare la precisione (numero di valori dopo il separatore decimale), usare un numero dopo:N, ad esempio{myNumber:N3}. - Formattare le percentuali usando l'identificatore di formato
:P. - La formattazione della valuta e dei numeri dipende dalle impostazioni cultura dell'utente finale, un codice di cinque caratteri che include il paese/area geografica e la lingua dell'utente (in base alle impostazioni del computer).