Article original : How to Convert a String to an Int in C# – Tutorial with Example Code

Par Ondrej Polesny

Convertir une chaîne en entier est une pratique courante lorsque vous traitez des entrées utilisateur, des données JSON, des réponses d'API ou des expressions régulières. Mais quelle est la bonne façon de le faire pour chaque scénario ?

Dans cet article, je vais expliquer trois façons de convertir une chaîne en nombre en C# et je vais vous montrer comment choisir la bonne méthode pour votre scénario.

Déterminer la source de vos données

Tout d'abord, voyons d'où proviennent vos données. Il est facile de convertir la chaîne "123" en entier, mais dans le monde réel, ce n'est jamais aussi simple.

La "chaîne de nombre" peut provenir d'une base de données, d'un fichier texte, d'une API ou d'un utilisateur de votre application. Alors, à quel point êtes-vous sûr qu'il s'agit vraiment d'un nombre ?

Source de donnéesConfianceCe qui peut arriver
Entrée utilisateur🤁"1.23"
"hello"
Données JSON😐"123.1"
""
Réponse API😐"11,7"
""
Correspondance d'expression régulière🤢expression invalide permettant non seulement des nombres

À quel point votre nombre peut-il être grand ?

Vous devez également savoir à quel point votre nombre cible peut être grand. Dans le cadre de cet article, nous parlons de Int. Cela est généralement considéré comme Int32 (int), mais vous pouvez également utiliser Int16 (short) et Int64 (long) selon la taille des nombres que vous attendez.

TypePlus grand nombre
Int16 (short)32767 (Int16.MaxValue)
Int32 (int)2,147,483,647 (Int32.MaxValue)
Int64 (long)9,223,372,036,854,775,807 (Int64.MaxValue)

int.Parse(String) – confiance de l'entrée : élevée 🤢

Utilisez int.Parse lorsque vous êtes sûr que l'entrée est vraiment un nombre. Il peut également analyser des nombres dans des formats spécifiques à une culture ou d'autres formats largement connus, mais vous devez connaître le format exact :

SignatureSortie
int.Parse("123")123
int.Parse("")lance FormatException
int.Parse(null)lance ArgumentNullException
int.Parse("123,000")lance FormatException
int.Parse("123,000",
System.Globalization.NumberStyles.AllowThousands,
new System.Globalization.CultureInfo("en-US"))
123000

Convert.ToInt32(String) – confiance de l'entrée : moyenne 😐

Convert est très similaire à int.Parse avec une exception : null est converti en 0 et ne lance pas d'exception. Il peut également gérer d'autres types de données d'entrée (pas seulement des chaînes) :

SignatureSortie
Convert.ToInt32("123")123
Convert.ToInt32("")lance FormatException
Convert.ToInt32(null)0
Convert.ToInt32("123,000")lance FormatException
Convert.ToInt32("1.23")lance FormatException
Convert.ToInt32(1.23)1

Note : Vous pouvez utiliser _Convert.ToInt32_ pour supprimer la précision d'un nombre derrière un point décimal. Cependant, pour assurer une bonne lisibilité du code, vous devriez utiliser _Math.Floor_ pour accomplir cette tâche.

Int*.TryParse(String, Int32) - confiance de l'entrée : faible 🤁

Utilisez TryParse chaque fois que vous ne faites pas confiance à votre source de données. Par exemple, lorsque vous obtenez une entrée utilisateur ou analysez et validez des données provenantes de formulaires soumis :

SignatureSortie
int number;
bool convertible = Int32.TryParse("123", out number)
number = 123
convertible = True
int number;
bool convertible = Int32.TryParse("hello", out number)
number = 0
convertible = False
int number;
bool convertible = Int32.TryParse("", out number)
number = 0
convertible = False

Note : Vous pouvez également déplacer la définition du nombre dans l'appel de la méthode TryParse en tapant out int number.

L'exemple le plus typique est avec Console.ReadLine :

while (!Int32.TryParse(Console.ReadLine(), out int number))
{
    Console.WriteLine("Veuillez entrer un nombre");
}
Console.WriteLine(number);

Conclusion

Dans cet article, je vous ai montré trois façons de convertir un nombre en chaîne en C# et expliqué comment décider quelle méthode utiliser en fonction de la source de vos données et de la confiance que vous avez en elle.

Si vous ne voulez pas manquer mes nouveaux articles, suivez-moi sur Twitter.