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