Em C #, a DateTime
propriedade Month
possui um tipo de int
(um número inteiro assinado de 32 bits), mas seu intervalo sempre será de 1 a 12. Quais são as razões pelas quais a equipe do C # escolheu int
um tipo numérico menor, como byte
(número inteiro não assinado de 8 bits)?
9
DateTime
conforme implementado no CoreFX, codifica o tempo como um único valor de 64 bits. Informações como dias ou meses são extraídas desse valor por meio de uma matemática inteligente (GetDatePart()
). Esta não é uma razão para usar um int como valor de retorno, apenas não possui desvantagens . Observe também que, devido a problemas de alinhamento, retornar um byte de uma função não será mais eficiente do que retornar um int.Month
.Respostas:
int
é usado para quase todas as variáveis inteiras no .NET, embora muitas vezes um tipo menor seja suficiente. Além disso, os tipos não assinados quase nunca são usados, embora possam ser.Algumas razões:
+
ou<
por exemplo). As regras não são óbvias. Sou um desenvolvedor experiente e não pude informar o conjunto completo de regras. Eu não preciso saberint
é rápido em todas as arquiteturas comuns. Tipos menores geralmente resultam em conversões que podem ser mais lentas.int
qualquer lugar.byte
sugeriria dados binários, por exemplo. (Veja o comentário de Flater.)É uma convenção útil de usar
int
.fonte
byte
propriedade, não pensaria automaticamente que é um valor numérico. Um byte pode ser muitas coisas (por exemplo, uma coleção compactada de booleanos). Empurrado um pouco mais, duvido que alguém olhe para abyte[]
e pense "aha, isso deve ser otimizadoList<int>
".Um mês não é um valor. Um mês é apenas um mês.
O mapeamento 1-12 (que deveria ter sido 0-11 imo) é feito apenas para facilitar a matemática.
E uma vez que você começa a fazer contas com isso, precisa ser pragmático. Ints são o padrão padrão para matemática inteira. Então use esses.
É o que os programadores esperam. Sem contexto: espere um int.
Como você não está interessado se janeiro é 1 (ou 0), você está interessado em respostas a perguntas como: "quantas parcelas mensais até que eu paguei essa dívida". E então você descobre que deveria ter usado o número inteiro em vez do byte.
fonte