HOWTO · Csharp

Convertir valores a int en C# con (int), int.Parse() y Convert.ToInt32()

En C#, elige el método según la entrada: usa el operador (int) para valores numéricos, int.Parse() para texto que representa un entero y Convert.ToInt32() para otros valores compatibles. Cada método trata de forma distinta las fracciones, los valores nulos y las entradas que no puede convertir.

En esta página

En C#, elige el método según la entrada: usa el operador (int) para un valor numérico, int.Parse() para texto que representa un entero y Convert.ToInt32() para otros valores compatibles que deban convertirse. Estos métodos difieren en cómo tratan las fracciones, los valores nulos y las entradas que no pueden convertir.

Convertir un valor numérico a int con el operador (int)

Un cast numérico es la opción directa cuando un valor ya tiene un tipo numérico. La expresión de conversión convierte el valor sin analizar texto. En los valores de coma flotante y decimales, la conversión a int trunca la parte fraccionaria hacia cero: 42.9 se convierte en 42, mientras que -42.9 se convierte en -42. Este ejemplo convierte un valor numérico y muestra el resultado.

using System;

class Program
{
    static void Main()
    {
        double value = 42.9;
        int result = (int)value;
        Console.WriteLine(result);
    }
}
42

El cast se aplica a tipos numéricos compatibles; no analiza una cadena como "42". Si un valor de coma flotante queda fuera del rango de int, una conversión en contexto no comprobado produce un resultado no especificado. En un contexto comprobado, una conversión fuera de rango lanza OverflowException. Usa checked((int)value) si quieres que se notifique el desbordamiento, o valida el rango antes de convertir. Consulta la guía de Microsoft sobre casts y conversiones de tipos.

Analizar una cadena con un entero mediante int.Parse()

Usa int.Parse() cuando la entrada sea una cadena que contenga un entero, como texto leído de un formulario o de una configuración. Devuelve un int si el texto cumple el formato de entero aceptado. El ejemplo analiza una cadena y muestra el número resultante.

using System;

class Program
{
    static void Main()
    {
        string text = "42";
        int result = int.Parse(text);
        Console.WriteLine(result);
    }
}
42

int.Parse() no convierte texto arbitrario ni un objeto numérico: analiza una cadena. Una cadena nula provoca ArgumentNullException; el texto que no representa un entero válido provoca FormatException; y un valor fuera del rango de int provoca OverflowException. Si la entrada del usuario podría ser inválida, usa int.TryParse() y comprueba su resultado booleano para evitar que un error de análisis interrumpa la operación. Las reglas de análisis predeterminadas usan la cultura actual; especifica una cultura cuando el texto provenga de una fuente con un formato numérico conocido.

Convertir valores compatibles a int con Convert.ToInt32()

Convert.ToInt32() resulta útil cuando la entrada puede ser un valor primitivo compatible, como un entero, un booleano, un número de coma flotante, un decimal o una cadena. No convierte todos los tipos posibles: las sobrecargas disponibles y las implementaciones de IConvertible determinan qué se puede convertir. Con una cadena, analiza texto que representa un entero. Con una entrada de coma flotante o decimal, redondea al entero más cercano mediante el redondeo al par en los puntos medios, a diferencia del truncamiento que realiza (int).

using System;

class Program
{
    static void Main()
    {
        double value = 42.5;
        int result = Convert.ToInt32(value);
        Console.WriteLine(result);
    }
}
42

Para este punto medio, el redondeo al par produce 42; un valor de 43.5 produce 44. Convert.ToInt32() devuelve 0 cuando recibe una referencia nula, mientras que las conversiones no compatibles, las cadenas mal formadas y los valores fuera del rango de int pueden provocar excepciones. Elige este método cuando sus reglas de conversión sean adecuadas para la entrada; usa int.Parse() si la entrada es específicamente texto con un entero, y un cast si quieres truncar un valor numérico.