C# Language
Gestione di FormatException durante la conversione di stringhe in altri tipi
Ricerca…
Conversione da stringa a intero
Sono disponibili vari metodi per convertire esplicitamente una string in un integer , ad esempio:
Convert.ToInt16();Convert.ToInt32();Convert.ToInt64();int.Parse();
Ma tutti questi metodi generano un FormatException , se la stringa di input contiene caratteri non numerici. Per questo, abbiamo bisogno di scrivere un'ulteriore gestione delle eccezioni ( try..catch ) per trattarli in questi casi.
Spiegazione con esempi:
Quindi, lascia che i nostri input siano:
string inputString = "10.2";
Esempio 1: Convert.ToInt32()
int convertedInt = Convert.ToInt32(inputString); // Failed to Convert
// Throws an Exception "Input string was not in a correct format."
Nota: lo stesso vale per gli altri metodi citati, vale a dire: Convert.ToInt16(); e Convert.ToInt64();
Esempio 2: int.Parse()
int convertedInt = int.Parse(inputString); // Same result "Input string was not in a correct format.
Come aggiriamo questo?
Come detto in precedenza, per gestire le eccezioni di solito abbiamo bisogno di un try..catch come mostrato di seguito:
try
{
string inputString = "10.2";
int convertedInt = int.Parse(inputString);
}
catch (Exception Ex)
{
//Display some message, that the conversion has failed.
}
Ma usare il try..catch ovunque non sarà una buona pratica, e potrebbero esserci alcuni scenari in cui vogliamo dare 0 se l'input è sbagliato, (Se seguiamo il metodo sopra, dobbiamo assegnare 0 a convertedInt da blocco di cattura). Per gestire tali scenari possiamo utilizzare un metodo speciale chiamato .TryParse() .
Il metodo .TryParse() con una gestione interna delle eccezioni, che fornisce l'output al parametro out e restituisce un valore booleano che indica lo stato della conversione ( true se la conversione ha avuto esito positivo, false se non è riuscita). Sulla base del valore di ritorno possiamo determinare lo stato della conversione. Vediamo un esempio:
Uso 1: memorizza il valore di ritorno in una variabile booleana
int convertedInt; // Be the required integer
bool isSuccessConversion = int.TryParse(inputString, out convertedInt);
Possiamo controllare la variabile isSuccessConversion dopo l'esecuzione per controllare lo stato della conversione. Se è falso, il valore di convertedInt sarà 0 (non è necessario controllare il valore restituito se si desidera 0 per errore di conversione).
Uso 2: controllare il valore restituito con if
if (int.TryParse(inputString, out convertedInt))
{
// convertedInt will have the converted value
// Proceed with that
}
else
{
// Display an error message
}
Uso 3: senza controllare il valore di ritorno è possibile utilizzare quanto segue, se non si cura del valore restituito (convertito o meno, 0 sarà ok)
int.TryParse(inputString, out convertedInt);
// use the value of convertedInt
// But it will be 0 if not converted