En general, siempre debe usar el tipo de datos más específico posible para sus datos.
Si, por ejemplo, está utilizando Entity Framework para extraer datos de una base de datos, EF usará automáticamente el tipo de datos más cercano al utilizado en la base de datos.
Hay dos problemas con esto en C #.
Primero, la mayoría de los desarrolladores de C # usan solo int
para representar números enteros (a menos que haya una razón para usar long
). Esto significa que otros desarrolladores no pensarán en verificar el tipo de datos, por lo que obtendrán los errores de desbordamiento mencionados anteriormente. El segundo, y más importante cuestión, es / fue que de .NET operadores aritméticos originales sólo se admite int
, uint
, long
, ulong
, float
, doble, y decimal
*. Este sigue siendo el caso hoy (consulte la sección 7.8.4 en la especificación del lenguaje C # 5.0 ). Puede probar esto usted mismo usando el siguiente código:
byte a, b;
a = 1;
b = 2;
var c = a - b; //In visual studio, hover over "var" and the tip will indicate the data type, or you can get the value from cName below.
string cName = c.GetType().Namespace + '.' + c.GetType().Name;
El resultado de nuestro byte
- byte
es un int
( System.Int32
).
Estos dos problemas dieron lugar a la práctica de "solo usar int para números enteros", que es tan común.
Entonces, para responder su pregunta, en C # generalmente es una buena idea seguir a int
menos que:
- Un generador de código automatizado utilizó un valor diferente (como Entity Framework).
- Todos los demás desarrolladores del proyecto son conscientes de que está utilizando los tipos de datos menos comunes (incluya un comentario que indique que utilizó el tipo de datos y por qué).
- Los tipos de datos menos comunes ya se usan comúnmente en el proyecto.
- El programa requiere los beneficios del tipo de datos menos común (tiene 100 millones de estos que necesita mantener en la RAM, por lo que la diferencia entre a
byte
y an int
o an int
y a long
es crítica, o las diferencias aritméticas de unsigned ya mencionadas).
Si necesita hacer cálculos matemáticos con los datos, siga los tipos comunes.
Recuerda, puedes lanzar de un tipo a otro. Esto puede ser menos eficiente desde el punto de vista de la CPU, por lo que probablemente sea mejor con uno de los 7 tipos comunes, pero es una opción si es necesario.
Enumeraciones ( enum
) es una de mis excepciones personales a las pautas anteriores. Si solo tengo algunas opciones, especificaré que la enumeración sea un byte o un short. Si necesito ese último bit en una enumeración marcada, especificaré el tipo para uint
que pueda usar hexadecimal para establecer el valor de la bandera.
Si utiliza una propiedad con código de restricción de valor, asegúrese de explicar en la etiqueta de resumen qué restricciones existen y por qué.
* Se usan alias C # en lugar de nombres .NET como, System.Int32
ya que esta es una pregunta C #.
Nota: hubo un blog o artículo de los desarrolladores de .NET (que no puedo encontrar), que señalaba el número limitado de funciones aritméticas y algunas razones por las que no se preocupaban por ello. Como recuerdo, indicaron que no tenían planes para agregar soporte para los otros tipos de datos.
Nota: Java no admite tipos de datos sin signo y anteriormente no tenía soporte para números enteros de 8 o 16 bits. Dado que muchos desarrolladores de C # provenían de un entorno Java o necesitaban trabajar en ambos idiomas, las limitaciones de un idioma a veces se impondrían artificialmente en el otro.