C# Programming

Conversión eficiente de carácter a entero en C#

Spread the love

Convertir un carácter que representa un dígito (0-9) a su equivalente entero es una tarea frecuente en C#. Este artículo explora cuatro métodos eficientes, destacando sus fortalezas y debilidades para ayudarlo a elegir el mejor enfoque para su escenario específico.

Tabla de contenido

Restar ‘0’

Este método explota el orden secuencial de los caracteres en ASCII y Unicode. Restar el carácter ‘0’ de un carácter dígito produce directamente su equivalente entero. Es conciso y altamente eficiente, pero limitado a dígitos ASCII (‘0’ a ‘9’).


using System;

public class CharToIntConversion
{
    public static void Main(string[] args)
    {
        char digitChar = '3';

        if (char.IsDigit(digitChar))
        {
            int intValue = digitChar - '0';
            Console.WriteLine($"El valor entero de '{digitChar}' es: {intValue}");
        }
        else
        {
            Console.WriteLine($"'{digitChar}' no es un dígito.");
        }
    }
}

Usando char.GetNumericValue()

El método char.GetNumericValue() ofrece una conversión robusta, manejando dígitos de varios rangos Unicode. Sin embargo, devuelve un double, requiriendo un casting a int, y devuelve -1 para caracteres no numéricos.


using System;

public class CharToIntConversion
{
    public static void Main(string[] args)
    {
        char digitChar = '7';

        double numericValue = char.GetNumericValue(digitChar);

        if (numericValue != -1)
        {
            int intValue = (int)numericValue;
            Console.WriteLine($"El valor entero de '{digitChar}' es: {intValue}");
        }
        else
        {
            Console.WriteLine($"'{digitChar}' no es un carácter numérico.");
        }
    }
}

Usando char.GetDecimalDigitValue()

Similar a GetNumericValue(), pero específicamente para dígitos decimales (0-9). Devuelve un int directamente y -1 si la entrada no es un dígito decimal, lo que lo hace eficiente y sencillo.


using System;

public class CharToIntConversion
{
    public static void Main(string[] args)
    {
        char digitChar = '9';
        int intValue = char.GetDecimalDigitValue(digitChar);

        if (intValue != -1)
        {
            Console.WriteLine($"El valor entero de '{digitChar}' es: {intValue}");
        }
        else
        {
            Console.WriteLine($"'{digitChar}' no es un dígito decimal.");
        }
    }
}

Usando int.Parse()

int.Parse() convierte una representación de cadena a un entero. Aunque aparentemente menos eficiente para caracteres individuales, es ventajoso cuando se manejan cadenas o se requiere un manejo robusto de errores. Lanza una FormatException si la entrada no es un entero válido.


using System;

public class CharToIntConversion
{
    public static void Main(string[] args)
    {
        char digitChar = '5';

        try
        {
            int intValue = int.Parse(digitChar.ToString());
            Console.WriteLine($"El valor entero de '{digitChar}' es: {intValue}");
        }
        catch (FormatException)
        {
            Console.WriteLine($"'{digitChar}' no es un entero válido.");
        }
    }
}

El método óptimo depende de su contexto. Para dígitos ASCII simples, restar ‘0’ es lo más rápido. Para un soporte Unicode más amplio y manejo de errores, GetNumericValue() o GetDecimalDigitValue() son preferibles. int.Parse() ofrece el manejo de errores más sólido, pero es menos eficiente para caracteres individuales. Siempre maneje los posibles errores de manera adecuada.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *