En C #, la DateTime
propiedad Month
tiene un tipo de int
(un entero con signo de 32 bits) pero su rango solo será 1-12. ¿Cuáles son las razones por las que el equipo de C # eligió int
un tipo numérico más pequeño como byte
(entero sin signo de 8 bits)?
9
DateTime
como se implementa en CoreFX, codifica el tiempo como un único valor de 64 bits. La información como días o meses se extrae de ese valor a través de algunas matemáticas inteligentes (GetDatePart()
). Esta no es una razón para usar un int como valor de retorno, simplemente no tiene inconvenientes . Tenga en cuenta también que debido a problemas de alineación, devolver un byte de una función no será más eficiente que devolver un int.Month
.Respuestas:
int
se usa para casi todas las variables enteras en .NET, aunque a menudo un tipo más pequeño sería suficiente. Además, los tipos sin signo casi nunca se usan, aunque podrían serlo.Algunos motivos:
+
o<
por ejemplo). Las reglas no son obvias. Soy un desarrollador experimentado y no podría decirte el conjunto completo de reglas. No necesito saberloint
es rápido en todas las arquitecturas comunes. Los tipos más pequeños a menudo resultan en conversiones que pueden ser más lentas.int
todas partes.byte
sugeriría datos binarios, por ejemplo. (Ver comentario de Flater.)Es una convención útil de usar
int
.fuente
byte
propiedad, no pensaría automáticamente que es un valor numérico. Un byte puede ser muchas cosas (por ejemplo, una colección compacta de booleanos). Empujado un poco más, dudo que alguien mire abyte[]
y piense "ajá, eso debe ser optimizadoList<int>
".Un mes no es un valor. Un mes es solo un mes.
El mapeo 1-12 (que debería haber sido 0-11 imo) solo se hace para que sea más fácil hacer matemáticas con él.
Y una vez que empiezas a hacer cálculos matemáticos, debes ser pragmático. Ints es el valor predeterminado de facto para la matemática entera. Así que usa esos.
Es lo que los programadores esperan. Sin contexto: esperar un int.
Debido a que no le interesa saber si enero es el 1 (o el 0), le interesan las respuestas a preguntas como: "cuántas cuotas mensuales hasta que pagué esta deuda". Y luego descubres que deberías haber usado el entero en lugar del byte.
fuente