Saltar al contenido

Conversión de datos en C#.

La conversión de datos en C#, puede realizarse de varias maneras. En este ejemplo pediremos que el usuario introduzca un número por teclado. Después lo almacenaremos en una variable de tipo byte.

using System;

namespace ConversionDeDatos
{
    class Program
    {
        static void Main(string[] args)
        {
            /* Para guardarlo necesitamos declarar una variable
             * cuyo tipo de dato sea un número entero.
             * por lo tanto, declaramos una variable tipo byte.
             * Le asignamos de un principio el valor cero*/
            byte varNumero = 0;

            // Pedimos por consola un número al usuario.
            Console.WriteLine("Introduce un número entre 0 y 255:");

            /* En la variable anterior vamos a almacenar el número
             * que introduce el usuario*/

            varNumero = Console.ReadLine(); // Esto es un error.

            // Pausamos la consola para ver los resultados.
            // Se cierra la consola cuando pulsamos cualquier tecla
            Console.ReadKey();
        }
    }
}

Alguien puede pensar que este código esta correcto pero no es así. Es cierto que estamos leyendo un dato que el usuario ha introducido por teclado. No menos cierto es, que lo estamos almacenando en una variable de tipo byte que almacena valores entre 0 y 255.

¿Dónde esta el error?

A la hora de leer la línea y almacenarla en la variable numérica, el lenguaje CSharp nos va a marcar un error en esa línea. Esto es porque aunque nosotros estemos almacenando números en variables numéricas, c# considera que estamos almacenando texto. Por consiguiente, para que C# entienda que estamos almacenando números en variables numéricas, es necesario hacer una conversión de ese dato para que la lectura sea correcta.

  • Como C# considera que estamos almacenando un texto (string), primero debemos pasarlo al tipo de dato que sea necesario, en este caso tipo byte.
  • Una vez convertido en byte, lo leemos y lo almacenamos en la variable.

Esta conversión la podemos hacerla de dos formas diferentes:

Conversión de datos en C#. Método parse.

using System;

namespace ConversionDeDatos
{
    class Program
    {
        static void Main(string[] args)
        {
            /* Para guardarlo necesitamos declarar una variable
             * cuyo tipo de dato sea un número entero.
             * por lo tanto, declaramos una variable tipo byte.
             * Le asignamos de un principio el valor cero*/
            byte varNumero = 0;

            // Pedimos por consola un número al usuario.
            Console.WriteLine("Introduce un número entre 0 y 255:");

            /* En la variable anterior vamos a almacenar el número
             * que introduce el usuario. con la instrucción
             * byte.parse() convertimos lo que el usuario
             * introduce a un tipo de dato byte.
             * Entre los paréntesis pondremos el método ReadLine();
             * para leer y almacenar el dato. De la siguiente manera*/

            varNumero = byte.Parse(Console.ReadLine());

            // Pausamos la consola para ver los resultados.
            // Se cierra la consola cuando pulsamos cualquier tecla
            Console.ReadKey(true);
        }
    }
}

Conversión de datos en C#. Clase Convert.

using System;

namespace MetodoConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            /* Para guardarlo necesitamos declarar una variable
             * cuyo tipo de dato sea un número entero.
             * por lo tanto, declaramos una variable tipo byte.
             * Le asignamos de un principio el valor cero*/
            byte varNumero = 0;

            // Pedimos por consola un número al usuario.
            Console.WriteLine("Introduce un número entre 0 y 255:");

            /* En la variable anterior vamos a almacenar el número
             * que introduce el usuario. Primero convertimos lo que
             * el usuario introduce en tipo byte a traves del
             * método ToByte de la clase Convert. De la siguiente forma.*/

            varNumero = Convert.ToByte(Console.ReadLine());

            // Ahora podemos mostrar el dato por de la variable.
            Console.WriteLine("El número es: " + varNumero);

            // Pausamos la consola para ver los resultados.
            // Se cierra la consola cuando pulsamos cualquier tecla
            Console.ReadKey(true);
        }
    }
}

Diferencia entre el método parse y la clase convert.

Aunque cada uno puede elegir la opción que más le guste, para explicar la diferencia que hay entre los dos, vamos a hacer uso de las funciones en csharp aunque las veremos más adelante.

Vamos a ver el primer ejemplo con la clase Convert.

using System;

namespace ConversionDeDatos
{
    class Program
    {
        public int edad()
        {
            // Declaramos una variable pero no le asignamos valor.
            int miEdad;

            // Hacemos una conversión del dato a tipo número.
            miEdad = Convert.ToInt32(Console.ReadLine());

            // Devolvemos el valor de la variable.
            return miEdad;
        }     
    }
}

En este primer caso tenemos una función sin parámetros, que devuelve un valor de tipo entero. Se declara la variable y luego se realiza una conversión a un tipo de dato entero con la clase Convert. Esto se hace de esta forma, ya que no se ha asignado ningún valor a la variable.

Al no haberse asignado ningún valor la variable tiene un valor nulo (null). Con la clase Convert, nos aseguramos que aunque el valor de la variable sea nulo, la función va a devolver cero. Esto nos evita que pueda saltar una excepción y se caiga el programa.

Veamos ahora el mismo ejemplo pero con el método parse:

using System;

namespace ConversionDeDatos
{
    class Program
    {
        public int edad()
        {
            // Declaramos una variable pero no le asignamos valor.
            int miEdad;

            // Pedimos una edad al usuario:
            Console.WriteLine("Introduce una edad");

            /* Vamos a imaginar que el usuario introduce su edad
            * y vamos a decir que la edad es igual a 34*/

            miEdad = 34; // (Se supone que el 34 lo teclea el usuario.

            // Tendriamos que hacer una conversión de datos a tipo int
            miEdad = int.Parse(Console.ReadLine());

            // Devolvemos el valor de la variable.
            return miEdad;
        }        
    }
}

En este segundo ejemplo usamos la opción de método parse. Esto podemos hacerlo así porque la función me esta devolviendo un valor que no es nulo y además es un número.

En este caso no daría ningún error el programa y podríamos utilizar este método.

De todas formas, es aconsejable usar la clase convert ya que en ocasiones no sabemos si una función va a devolver un valor nulo o no.

MÁS INFORMACIÓN