HOWTO · Csharp

Lire un entier à partir de la console en C#

Il existe 3 méthodes principales qui peuvent être utilisées pour lire une valeur entière à partir de la console en C#, les méthodes int.Parse(), int.TryParse() et Convert.ToInt32().

Sur cette page

Pour lire un entier depuis une console C#, lisez d’abord une ligne avec Console.ReadLine(), puis convertissez le texte obtenu. Utilisez int.TryParse() lorsque l’utilisateur risque de saisir un texte inattendu : cette méthode indique si la conversion a réussi et permet de traiter une saisie incorrecte ordinaire dans le flux normal du programme. Ce guide compare int.Parse(), int.TryParse() et Convert.ToInt32() pour lire une ligne de texte.

Lire un entier depuis la console avec int.Parse()

int.Parse() convertit en int une chaîne contenant un entier valide sur 32 bits. Cette méthode est concise lorsque la saisie est fiable ou que le code appelant gère les erreurs de conversion.

Ce programme complet lit une ligne et affiche la valeur convertie :

using System;
using System.IO;

class Program
{
    static void Main()
    {
        Console.SetIn(new StringReader("42"));
        Console.Write("Enter an integer: ");
        string input = Console.ReadLine();
        int value = int.Parse(input);
        Console.WriteLine($"You entered: {value}");
    }
}
Enter an integer: You entered: 42

Un texte qui ne représente pas un entier provoque une FormatException ; une valeur hors de la plage de Int32 provoque une OverflowException. Dans une véritable session de console, Console.ReadLine() renvoie null si le flux d’entrée se termine avant la lecture d’une ligne. Passer cette valeur à int.Parse() provoque une ArgumentNullException : si la fin de l’entrée est possible, vérifiez donc d’abord que la valeur n’est pas null. L’exemple fournit 42 au moyen d’un StringReader afin de rester autonome.

Lire un entier depuis la console avec int.TryParse()

int.TryParse() est généralement le choix le plus clair pour une saisie interactive, car la réussite de la conversion fait partie du flux normal du programme. La méthode renvoie true et affecte le nombre converti à la variable out lorsque le texte représente un entier compris dans la plage autorisée. Sinon, elle renvoie false et affecte la valeur par défaut (0) à cette variable ; vérifiez le résultat booléen avant d’utiliser le nombre.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        Console.SetIn(new StringReader("42"));
        Console.Write("Enter an integer: ");
        string input = Console.ReadLine();
        int value;

        if (int.TryParse(input, out value))
        {
            Console.WriteLine($"You entered: {value}");
        }
        else
        {
            Console.WriteLine("Enter a whole number within the Int32 range.");
        }
    }
}
Enter an integer: You entered: 42

Pour un texte non numérique, une fin de l’entrée ou une valeur hors de la plage de int, TryParse renvoie false ; le programme affiche alors le message de la branche else. Vous pouvez placer l’invite et la vérification de conversion dans une boucle pour permettre une nouvelle tentative ; cet exemple répond une fois puis se termine. Ici, StringReader fournit 42 afin que l’exemple reste autonome.

Lire un entier depuis la console avec Convert.ToInt32()

Convert.ToInt32() permet également de convertir la ligne renvoyée par Console.ReadLine(). Pour un texte numérique, cette méthode produit la même valeur int que int.Parse(). Elle ne rend pas pour autant n’importe quel texte convertible sans risque : un texte non numérique peut provoquer une FormatException, et une valeur hors de la plage de Int32 peut provoquer une OverflowException. Une chaîne null constitue un cas particulier : Convert.ToInt32((string)null) renvoie 0, tandis que int.Parse(null) provoque une ArgumentNullException.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        Console.SetIn(new StringReader("42"));
        Console.Write("Enter an integer: ");
        string input = Console.ReadLine();
        int value = Convert.ToInt32(input);
        Console.WriteLine($"You entered: {value}");
    }
}
Enter an integer: You entered: 42

Choisissez int.TryParse() lorsque la saisie vient d’une personne et qu’un parcours normal de validation est souhaitable. Utilisez int.Parse() ou Convert.ToInt32() lorsque le code appelant doit gérer les erreurs de conversion. Dans ces exemples de console, les trois méthodes commencent par Console.ReadLine() ; elles se distinguent par la façon dont elles traitent le résultat de la conversion et les valeurs d’entrée particulières.