Esercizio - Esaminare il metodo TryParse()
- 12 minuti
Quando si lavora con i dati, a volte è necessario convertire i dati stringa in un tipo di dati numerico. Come si è appreso nell'unità precedente, poiché il tipo di dati stringa può contenere un valore non numerico, è possibile che l'esecuzione di una conversione da un string in un tipo di dati numerico causi un errore di runtime.
Ad esempio, il seguente codice:
string name = "Bob";
Console.WriteLine(int.Parse(name));
Causa l'eccezione seguente:
System.FormatException: 'Input string was not in a correct format.'
Per evitare un'eccezione di formato, usare il metodo TryParse() nel tipo di dati di destinazione.
Usare TryParse()
Il metodo TryParse() esegue diverse operazioni contemporaneamente:
- Prova ad analizzare una stringa nel tipo di dati numerico specificato.
- In caso di esito positivo, archivia il valore convertito in un parametro out, illustrato nella sezione seguente.
- Restituisce un valore
boolper indicare se l'azione è riuscita o meno.
È possibile usare il valore restituito booleano per eseguire un'azione sul valore, ad esempio eseguendo un calcolo, oppure visualizzare un messaggio se l'operazione di analisi non è riuscita.
Nota
In questo esercizio si usa il tipo di dati int, ma un metodo TryParse() simile è disponibile per tutti i tipi di dati numerici.
Parametri out
I metodi possono restituire un valore oppure restituire "void", ovvero non restituire alcun valore. I metodi possono anche restituire valori attraverso i parametri out, che vengono definiti proprio come un parametro di input, ma includono la parola chiave out.
Utilizzare TryParse() per convertire una stringa in un int
Eliminare o usare l'operatore di commento riga
//per impostare come commento tutto il codice degli esercizi precedenti.Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:
string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); }Esaminare questa riga di codice:
if (int.TryParse(value, out result))Quando si chiama un metodo con un parametro
out, è necessario usare anche la parola chiaveoutprima della variabile che conterrà il valore. Il parametrooutviene assegnato allaresultvariabile nel codice(int.TryParse(value,out result). È quindi possibile usare il valore che il parametrooutcontiene nel resto del codice usando la variabileresult.Il metodo
int.TryParse()restituiscetruese lastringvariabilevalueè stata convertita correttamente inint; In caso contrario, restituiscefalse. L'istruzione viene quindi racchiusa in un'istruzioneife viene eseguita adeguatamente la logica decisionale.Il valore convertito viene archiviato nella
intvariabileresult. La variabileintresultviene dichiarata e inizializzata prima di questa riga di codice, quindi deve essere accessibile sia all'interno dei blocchi di codice appartenenti alle istruzioniifedelseche all'esterno di essi.La parola chiave
outindica al compilatore che il metodoTryParse()non restituisce un valore nel modo tradizionale (come valore restituito), ma comunica anche un output tramite questo parametro bidirezionale.Quando si esegue il codice, viene visualizzato l'output seguente:
Measurement: 102
Usa l'elemento analizzato int più avanti nel codice
Per dimostrare che la variabile
resultdichiarata in precedenza, viene popolata daloutparametro ed è utilizzabile anche più avanti nel codice, aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } Console.WriteLine($"Measurement (w/ offset): {50 + result}");Nel menu File di Visual Studio Code, selezionare Salva. Il file Program.cs deve essere salvato prima di compilare o eseguire il codice.
Nel pannello ESPLORA RISORSE, per aprire un terminale nel percorso della cartella TestProject, fare clic con il pulsante destro del mouse su TestProject, quindi scegliere Apri nel terminale integrato. Verrà aperto un pannello del terminale con un prompt dei comandi indicante che il terminale è aperto nella posizione della cartella TestProject.
Nel prompt dei comandi del terminale, digitare dotnet run per eseguire il codice, quindi premere INVIO.
Nota
Se viene visualizzato un messaggio riportante: “Non è stato possibile trovare un progetto da eseguire”, assicurarsi che il prompt dei comandi del terminale visualizzi il percorso previsto della cartella TestProject. Ad esempio:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Verrà visualizzato l'output seguente:
Measurement: 102 Measurement (w/ offset): 152Esaminare l'ultima riga di codice nell'esempio precedente,
Console.WriteLine($"Measurement (w/ offset): {50 + result}");, poiché la variabileresultè definita all'esterno dell'istruzione if, è possibile accedervi più avanti nel codice.
Modificare la variabile stringa in un valore che non può essere analizzato
Si esaminerà infine l'altro scenario, in cui si assegna intenzionalmente a TryParse() un valore non valido che non può essere convertito in int.
Modificare la prima riga di codice reinizializzando la variabile
valuein un valore diverso.string value = "bad";Modificare anche l'ultima riga di codice per assicurarsi che il risultato sia maggiore di 0 prima di visualizzare il secondo messaggio.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");L'intero esempio di codice dovrà corrispondere al codice seguente:
string value = "bad"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice. Si dovrebbe ottenere il risultato seguente:
Unable to report the measurement.Esaminare le ultime due righe di codice aggiunte nell'esempio precedente.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Poiché
resultè definito all'esterno dell'istruzioneif,resultè possibile accedervi in un secondo momento nel codice all'esterno dei blocchi di codice. È quindi possibile verificare cheresultabbia un valore maggiore di zero prima di consentire cheresult+ offset sia scritto come output. Controllare un valoreresultmaggiore di zero evita di stampare un valore di offset dopo il messaggioUnable to report the measurement..
Riepilogo
Il metodo TryParse() è uno strumento utile. Ecco alcuni semplici concetti da ricordare.
- Usare
TryParse()quando si converte una stringa in un tipo di dati numerico. TryParse()restituiscetruese la conversione ha esito positivo,falsein caso di esito negativo.- I parametri out forniscono un mezzo secondario di un metodo che restituisce un valore. In questo caso, il parametro
outrestituisce il valore convertito. - Usare la parola chiave
outquando si passa un argomento a un metodo che ha definito un parametroout.