C# Language Conversione da stringa a intero


Esempio

Sono disponibili vari metodi per convertire esplicitamente una string in un integer , ad esempio:

  1. Convert.ToInt16();

  2. Convert.ToInt32();

  3. Convert.ToInt64();

  4. 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