HOWTO · Csharp
Leggi numero intero dalla console in C#
Esistono 3 metodi principali che possono essere utilizzati per leggere un valore intero dalla console in C#, i metodi int.Parse(), int.TryParse() e Convert.ToInt32().
In questa pagina
Per leggere un numero intero dalla console in C#, leggi prima una riga con Console.ReadLine() e poi converti il testo. Se l’utente potrebbe inserire un testo imprevisto, usa int.TryParse(): indica se la conversione è riuscita e gestisce i normali errori di input nel flusso di controllo, senza ricorrere alle eccezioni. Questa guida confronta int.Parse(), int.TryParse() e Convert.ToInt32() per l’input letto riga per riga.
Leggere un numero intero dalla console con int.Parse()
int.Parse() converte in un int una stringa che contiene un numero intero valido a 32 bit. È conciso quando l’input è attendibile o quando il codice circostante gestisce gli errori di conversione.
Questo programma completo legge una riga e stampa il valore convertito:
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 testo che non rappresenta un numero intero causa FormatException; un valore fuori dall’intervallo di Int32 causa OverflowException. In una normale sessione della console, Console.ReadLine() restituisce null se il flusso di input termina prima che venga letta una riga. Passare questo valore a int.Parse() causa ArgumentNullException, quindi, se è possibile raggiungere la fine dell’input, verifica prima che il valore non sia null. L’esempio fornisce 42 tramite un StringReader, così da essere autonomo.
Leggere un numero intero dalla console con int.TryParse()
int.TryParse() è di solito la scelta più chiara per l’input interattivo, perché l’esito della conversione fa parte del normale flusso di controllo. Restituisce true e assegna il numero convertito alla variabile out quando il testo rappresenta un numero intero compreso nell’intervallo valido. Altrimenti restituisce false e assegna a quella variabile il valore predefinito (0); verifica il risultato booleano prima di usare il numero.
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
Se il testo non è numerico, l’input termina prima che venga letta una riga oppure il valore è fuori dall’intervallo di int, TryParse restituisce false e il programma stampa il messaggio nel ramo else. Puoi inserire la richiesta e il controllo di parsing in un ciclo per consentire un nuovo tentativo; questo esempio mostra una sola risposta e termina. Qui StringReader fornisce 42 per mantenere l’esempio autonomo.
Leggere un numero intero dalla console con Convert.ToInt32()
Convert.ToInt32() è un altro modo per convertire la riga restituita da Console.ReadLine(). Per un testo numerico produce lo stesso valore int di int.Parse(). Non rende sicura la conversione di testo arbitrario: un testo non numerico può causare FormatException e un valore fuori dall’intervallo di Int32 può causare OverflowException. Una stringa null è un caso particolare: Convert.ToInt32((string)null) restituisce 0, mentre int.Parse(null) causa 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
Scegli int.TryParse() quando l’input proviene da una persona e vuoi gestirne la validità con un normale percorso di controllo. Usa int.Parse() o Convert.ToInt32() quando gli errori di conversione devono essere gestiti dal codice chiamante. In questi esempi di input da console, tutti e tre i metodi partono da Console.ReadLine(); differiscono nel modo in cui gestiscono l’esito della conversione e i valori di input particolari.