2011-06-14 20 views

Respuesta

9

Un integer (Int32) está limitado en los valores que puede almacenar ya que "solo" usa 32 bits. Puede almacenar un valor entre 2,147,483,647 y -2,147,483,648. (More information on MSDN)

El valor representado por txmobileno.Text es demasiado grande o demasiado pequeño.

Mirando el nombre txmobileno es probablemente un número de teléfono móvil. Este tipo de números tienen demasiados dígitos para almacenar en un int32. También un número de teléfono tiende a comenzar con 0 o 00 o + (internacional). No hay forma de almacenar este tipo de información en un entero (u otro tipo de número). Solo guárdelos en un string.

+1

En el lado positivo, los números de teléfono en mi estado en los Estados Unidos normalmente ejecutan 503-nnn-nnnn o 541-nnn-nnnn lo que significa _I_ No se preocupe por los marcadores automáticos mal escritos que suponen que un número entero puede contener cualquier número de teléfono. :) – sarnold

46

¿Por qué utilizaría un número entero para almacenar un número de teléfono?

No se puede hacer una aritmética de manera significativa en una y se pierden todos los ceros a la izquierda.

Use una cadena en su lugar.

4

Como han señalado otros, almacenar un número de teléfono como un número entero es un error.

  • Pierdes la capacidad de almacenar caracteres y espacios en blanco, por ejemplo códigos de país - "+44 (0800) 12345".
  • No hay ninguna razón lógica para almacenarlo como un entero. ¿Alguna vez necesitaría hacer aritmética en dos números de teléfono? ¿Tiene sentido agregar dos números de teléfono juntos?
  • Se perderán ceros a la izquierda - (0800 12345) se convertirá en (80).
  • Almacenarlo como una cadena le permite hacer la validación de expresiones regulares en la entrada del usuario.

Una vez dicho esto, la pregunta original plantea algunos puntos que se deben hacer:

  • Prefiero Int32.TryParse en lugar de Convert.ToInt32 cuando el valor de la fuente es una cadena.
  • Cuando se trata de valores que potencialmente pueden desbordarse, encierre el código en un bloque marcado {...}.
Cuestiones relacionadas