Versus [II]


Mientras trataba de pasar un tipo String a Int32, me di cuenta que podía usar la clase Convert.toInt32 o el método Int32.Parse.

Diferencia entre Convert y Parse

Ambos métodos son útiles para convertir de un tipo a otro tipo, por ejemplo:

Int32 entero = Convert.ToInt32("2546");
Int32 entero = Int32.Parse("2456");

El resultado en ambos es 2546 como entero.

Podemos cambiar de muchos tipos a otros, en la siguiente imagen vemos algunos de los ejemplos que nos muestra el Intellisense al usar la clase Convert:

 Convert

Los tipos que se admiten son:

Boolean, Char, SByte, Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal, DateTime y String.

El método Parse, hace lo mismo que la clase Convert, se usa para Convertir un tipo de dato a otro tipo de dato.

La única diferencia entre los dos, es cuando intentamos convertir un valor nulo, por ejemplo:

Int32 entero = Convert.ToInt32(null); //Retorna 0.
Int32 entero = Int32.Parse(null); // Produce un Excepción ArgumentNullException

 Parse

Bien, pero el problema era que la cadena que iba a convertir tenía un carácter  de Tab, por lo tanto me urgía que reconociera esto como un dato no numérico, por ejemplo, si ejecutamos el siguiente código, ambos métodos No me arrojan error :

String cadena = "123456" + "\t";
Int32 Parse = Int32.Parse(cadena);
Int32 Convertir = Convert.ToInt32(cadena);
Console.WriteLine("Parse: " + Parse);
Console.WriteLine("Convertir: " + Convertir);
Console.ReadLine();

Para eso use el siguiente método, que es recorrer toda la cadena y verificar carácter por carácter y verificar si son números:

Int32 longitud = cadena.Length;
for (int i = 0; i < longitud; i++)
   {
   if (!Char.IsDigit(cadena, i))
     {
      Console.WriteLine("La cadena :" + cadena + " contiene un carácter no numérico en la posición " + (i+1));
       break;
     }
   }

Diferencia entre Char.IsDigit() y Char.IsNumber

El método Char.IsNumber devuelve True si el objeto pertenece a una categoría numérica de Unicode, mientras que el método Char.IsDigit devuelve True si el objeto es un dígito en base 10.

En pocas palabras, Char.IsDigit es una parte de Char.IsNumber, pues Char.IsNumber valida las categorias Unicode:

  • DecimalDigitNumber (Char.IsDigit)
  • LetterNumber (Números Romanos, o letras que equivalen a Números)
  • OtherNumber (Valores Unicode para  ‘¼’, ‘½’, and ‘¾’)

Pero esto no significa que si hacemos Char.IsNumber(“V”) nos devuelva True, no, debemos ingresar el valor Unicode de dicho valor.

Referencias:

http://207.46.16.248/es-es/library/system.globalization.unicodecategory(VS.95).aspx

http://stackoverflow.com/questions/228532/difference-between-char-isdigit-and-char-isnumber-in-c

Anuncios

Deseas comentar o sugerir algo?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s