HOWTO · Csharp
Leer entero desde la consola en C#
Hay 3 métodos principales que se pueden usar para leer un valor entero desde la consola en C#, los métodos int.Parse(), int.TryParse() y Convert.ToInt32().
En esta página
Para leer un entero desde la consola en C#, primero lee una línea con Console.ReadLine() y después convierte el texto. Usa int.TryParse() cuando el usuario pueda introducir texto inesperado: el método indica si la conversión se realizó correctamente y permite gestionar los errores habituales de entrada como parte del flujo normal del programa. Esta guía compara int.Parse(), int.TryParse() y Convert.ToInt32() para leer datos línea por línea.
Leer un entero de la consola con int.Parse()
int.Parse() convierte en un int una cadena que contiene un entero válido de 32 bits. Es una opción concisa cuando confías en la entrada o cuando el código que la rodea gestiona los errores de conversión.
Este programa completo lee una línea e imprime el valor convertido:
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
El texto que no representa un entero provoca una FormatException; un valor fuera del rango de Int32 provoca una OverflowException. En una sesión real de consola, Console.ReadLine() devuelve null si el flujo de entrada termina antes de que se lea una línea. Pasar ese valor a int.Parse() provoca una ArgumentNullException, así que comprueba si es null primero cuando sea posible que se agote la entrada. El ejemplo proporciona 42 mediante un StringReader para que se ejecute de forma autónoma.
Leer un entero de la consola con int.TryParse()
int.TryParse() suele ser la opción más clara para la entrada interactiva, porque el resultado de la conversión forma parte del flujo normal del programa. Devuelve true y asigna el número convertido a la variable out cuando el texto representa un entero dentro del rango. De lo contrario, devuelve false y asigna a esa variable el valor predeterminado (0); comprueba el resultado booleano antes de usar el número.
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
Si el texto no es numérico, se agota la entrada o el valor queda fuera del rango de int, TryParse devuelve false y el programa imprime el mensaje de la rama else. Puedes incluir el mensaje y la comprobación de conversión en un bucle para permitir que la persona vuelva a intentarlo; este ejemplo responde una vez y termina. Aquí, StringReader proporciona 42 para que el ejemplo sea autónomo.
Leer un entero de la consola con Convert.ToInt32()
Convert.ToInt32() es otra forma de convertir la línea que devuelve Console.ReadLine(). Si el texto es numérico, produce el mismo valor int que int.Parse(). No hace que cualquier texto sea seguro: el texto no numérico puede provocar una FormatException, y un valor fuera del rango de Int32 puede provocar una OverflowException. Una cadena null es un caso especial: Convert.ToInt32((string)null) devuelve 0, mientras que int.Parse(null) provoca una 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
Elige int.TryParse() cuando la entrada la proporciona una persona y resulte útil seguir una ruta de validación normal. Usa int.Parse() o Convert.ToInt32() cuando el código que realiza la llamada deba gestionar los errores de conversión. En estos ejemplos de consola, los tres métodos empiezan con Console.ReadLine(); se diferencian en cómo gestionan los resultados de la conversión y los valores de entrada especiales.