C# Language
Gestion de FormatException lors de la conversion d'une chaîne en d'autres types
Recherche…
Conversion de chaîne en entier
Il existe différentes méthodes pour convertir explicitement une string
en un integer
, par exemple:
Convert.ToInt16();
Convert.ToInt32();
Convert.ToInt64();
int.Parse();
Mais toutes ces méthodes vont lancer une FormatException
, si la chaîne d'entrée contient des caractères non numériques. Pour cela, nous devons écrire une gestion des exceptions supplémentaire ( try..catch
) pour les traiter dans de tels cas.
Explication avec des exemples:
Alors, laissez notre contribution être:
string inputString = "10.2";
Exemple 1: Convert.ToInt32()
int convertedInt = Convert.ToInt32(inputString); // Failed to Convert
// Throws an Exception "Input string was not in a correct format."
Remarque: Il en va de même pour les autres méthodes mentionnées, à savoir - Convert.ToInt16();
et Convert.ToInt64();
Exemple 2: int.Parse()
int convertedInt = int.Parse(inputString); // Same result "Input string was not in a correct format.
Comment pouvons-nous contourner cela?
Comme indiqué précédemment, pour gérer les exceptions, nous avons généralement besoin d'un try..catch
comme indiqué ci-dessous:
try
{
string inputString = "10.2";
int convertedInt = int.Parse(inputString);
}
catch (Exception Ex)
{
//Display some message, that the conversion has failed.
}
Mais, en utilisant le try..catch
partout ne sera pas une bonne pratique, et il peut y avoir des scénarios où l' on a voulu donner 0
si l'entrée est erronée, (si nous suivons la méthode ci - dessus , nous devons attribuer 0
à convertedInt
de la bloc de capture). Pour gérer de tels scénarios, nous pouvons utiliser une méthode spéciale appelée .TryParse()
.
La méthode .TryParse()
ayant une gestion interne des exceptions, qui vous donnera le résultat du paramètre out
et renvoie une valeur booléenne indiquant le statut de la conversion ( true
si la conversion a réussi; false
si elle a échoué). Sur la base de la valeur de retour, nous pouvons déterminer le statut de conversion. Voyons un exemple:
Utilisation 1: Stocke la valeur de retour dans une variable booléenne
int convertedInt; // Be the required integer
bool isSuccessConversion = int.TryParse(inputString, out convertedInt);
Nous pouvons vérifier la variable isSuccessConversion
après l'exécution pour vérifier l'état de la conversion. S'il est faux, la valeur de convertedInt
sera 0
(pas besoin de vérifier la valeur de retour si vous voulez 0
pour un échec de conversion).
Usage 2: Vérifiez la valeur de retour avec if
if (int.TryParse(inputString, out convertedInt))
{
// convertedInt will have the converted value
// Proceed with that
}
else
{
// Display an error message
}
Utilisation 3: Sans vérifier la valeur de retour, vous pouvez utiliser ce qui suit si vous ne vous souciez pas de la valeur de retour (converti ou non, 0
sera correct)
int.TryParse(inputString, out convertedInt);
// use the value of convertedInt
// But it will be 0 if not converted