Os mostramos cuatro métodos para convertir una cadena de texto de tipo String a un valor numérico de tipo Int32 (válido para sbyte, byte, short, ushort, int, uint, long, ulong), usando el lenguaje de programación C# (C Sharp) de Visual Studio .Net, en su versión Microsoft Visual Studio .Net Community 2019.
- Requisitos iniciales, tipos de número entero (Int) en C#.
- Convertir texto String a número Int32 usando TryParse (el método más usado).
- Convertir texto String a número Int32 usando TryParse y devolviendo null si da error.
- Convertir texto String a número Int32 usando Convert, capturando el error.
- Convertir texto String a número Int32 usando Parse.
Requisitos iniciales, tipos de número entero (Int) en C#
Necesitaremos disponer del IDE de desarrollo Microsoft Visual Studio .Net Community 2019 (es gratuito), o bien alguna versión similar. En el siguiente artículo explicamos cómo descargar e instalar Visual Studio Community 2017 (también sirve):
Tipos de números enteros (Int) disponibles en C# C Sharp y sus rangos
Tipo C# | Intervalo | Tamaño | Tipo .Net |
---|---|---|---|
sbyte | De -128 a 127 | Entero de 8 bits con signo | System.SByte |
byte | De 0 a 255 | Entero de 8 bits sin signo | System.Byte |
short | De -32 768 a 32 767 | Entero de 16 bits con signo | System.Int16 |
ushort | De 0 a 65.535 | Entero de 16 bits sin signo | System.UInt16 |
int | De -2.147.483.648 a 2.147.483.647 | Entero de 32 bits con signo | System.Int32 |
uint | De 0 a 4.294.967.295 | Entero de 32 bits sin signo | System.UInt32 |
long | De -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 | Entero de 64 bits con signo | System.Int64 |
ulong | De 0 a 18.446.744.073.709.551.615 | Entero de 64 bits sin signo | System.UInt64 |
Convertir texto String a número Int32 usando TryParse (el método más usado)
A continuación os mostramos una función de ejemplo que convierte un String pasado por parámetro en Int32 y devuelve el valor convertido. Si no puede convertir el texto no dará error, devolverá 0. Usaremos TryParse:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//Convertir texto a Int32 usando TryParse, devolverá 0 si no se puede convertir public Int32 convertirTextoaInt32_M1 (string valorAConvertir) { Int32 valorConvertido = 0; //Si no puede convertirlo no dará error, devolverá 0 if (!Int32.TryParse(valorAConvertir, out valorConvertido)) { valorConvertido = 0; } return valorConvertido; } |
Un ejemplo de uso de la función anterior:
1 2 3 4 5 6 7 8 9 10 11 12 |
string texto = "3322"; int numRep = convertirTextoaInt32_M1(texto); if (numRep > 0) { foreach (var update in updates) { offset = update.Id + 1; if (update.Message == null) continue; ... } } |
Convertir texto String a número Int32 usando TryParse y devolviendo null si da error
A continuación os mostramos una función de ejemplo que convierte un String pasado por parámetro en Int32 y devuelve el valor convertido. Si no puede convertir el texto no dará error, devolverá null. Usaremos TryParse:
1 2 3 4 5 6 7 8 9 |
//Convertir texto a Int32 usando TryParse, devolverá null si no se puede convertir public Int32? convertirTextoaInt32_M2(string valorAConvertir) { Int32 valorConvertido = 0; //Si no puede convertirlo no dará error, devolverá null return (!Int32.TryParse(valorAConvertir, out valorConvertido) ? valorConvertido : (Int32?)null); } |
Ejemplo de uso:
1 2 3 4 5 6 7 8 9 10 11 12 |
string texto = "3322"; int ?numRep = convertirTextoaInt32_M2(texto); if (numRep != null) { foreach (var update in updates) { offset = update.Id + 1; if (update.Message == null) continue; ... } } |
Al introducir el carácter ? delante de la declaración de una variable estamos indicando que admita «null». Por ejemplo:
int ?numRep;
Convertir texto String a número Int32 usando Convert, capturando el error
Otra forma de realizar una conversión de texto a entero en C# es usando Convert. Con esta función podremos capturar el error. Un ejemplo de uso de esta función:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//Convertir texto a Int32 usando Convert, dará error si no se puede convertir public Int32 convertirTextoaInt32_M3(string valorAConvertir) { Int32 valorConvertido = 0; try { valorConvertido = System.Convert.ToInt32(valorAConvertir); return valorConvertido; } catch (FormatException) { // Aquí podremos capturar el error cuando el valor a //convertir no es un número enterior y no puede ser convertido MessageBox.Show("Error al convertir texto a entero. No " + "ha introducido un número.", "Error de conversión", MessageBoxButtons.OK, MessageBoxIcon.Error); return 0; } catch (OverflowException) { // Aquí podremos capturar el error si el valor a //convertir es un número pero es //demasiado grande para Int32 (valores de -2.147.483.648 a 2.147.483.647) MessageBox.Show("Error al convertir texto a entero. Ha " + "introducido un número demasiado grande.", "Error de conversión", MessageBoxButtons.OK, MessageBoxIcon.Error); return 0; } } |
Ejemplo de uso:
1 2 3 4 5 6 7 8 9 10 11 12 |
string texto = "3322"; int numRep = convertirTextoaInt32_M3(texto); if (numRep > 0) { foreach (var update in updates) { offset = update.Id + 1; if (update.Message == null) continue; ... } } |
Convertir texto String a número Int32 usando Parse
En este caso, el método Parse es similar a TryParse, con la salvedad de que si no logra convertir el valor de texto a número dará error. Un ejemplo de uso de esta función:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
//Convertir texto a Int32 usando Convert, dará error si no se puede convertir public Int32 convertirTextoaInt32_M4(string valorAConvertir) { Int32 valorConvertido = 0; //Si no puede convertirlo dará error try { valorConvertido = Int32.Parse(valorAConvertir); return valorConvertido; } catch (FormatException) { // Aquí podremos capturar el error cuando el valor a //convertir no es un número enterior y no puede ser convertido MessageBox.Show("Error al convertir texto a entero. No " + "ha introducido un número.", "Error de conversión", MessageBoxButtons.OK, MessageBoxIcon.Error); return 0; } catch (OverflowException) { // Aquí podremos capturar el error si el valor a //convertir es un número pero es //demasiado grande para Int32 (valores de -2.147.483.648 a 2.147.483.647) MessageBox.Show("Error al convertir texto a entero. Ha " + "introducido un número demasiado grande.", "Error de conversión", MessageBoxButtons.OK, MessageBoxIcon.Error); return 0; } } |
Un ejemplo de uso:
1 2 3 4 5 6 7 8 9 10 11 12 |
string texto = "3322"; int numRep = convertirTextoaInt32_M4(texto); if (numRep > 0) { foreach (var update in updates) { offset = update.Id + 1; if (update.Message == null) continue; ... } } |