Como obter o comprimento de um TypeCode
-
06-07-2019 - |
Pergunta
Eu tenho certeza que esta é uma pergunta fácil, mas eu não tenho uma resposta para. Aqui está o senario ea questão.
Eu tenho uma matriz que foi armazenado usando em um formato particular. O formato contém um registro de cabeçalho com registros de detalhes muntiple seguintes ele. O cabeçalho do registro me diz o TypeCode foi usado para armazenar os dados, por exemplo Int32.
Eu tenho uma rotina que leva uma matriz byte [] e converte os dados de volta byte ao seu formato adequado em C #. Esta rotina tem o número adequado de bytes para fazer a conversão bem-sucedida.
Q. Então, como posso obter o comprimento de bytes do TypeCode dada para passar para a função Convert sem ter que codificar o comprimento para cada tipo?
Solução
Dado que TypeCode
é apenas uma enumeração de um conjunto fixo de valores, você poderia facilmente codificar um dicionário deles, por exemplo.
private static readonly Dictionary<TypeCode,int> TypeCodeLength =
new Dictionary<TypeCode,int> {
{ TypeCode.Int32, 4 },
{ TypeCode.Int64, 8 },
{ TypeCode.Char, 2 },
// etc
}
(uma solução equivalente seria usar uma instrução switch / case -. Eles realmente são equivalentes, se você está apenas incluindo valores)
Alguns, como string
e object
será variável embora -. E outros irão depender de como você está codificação coisas como DateTime
A menos que isso é usando uma conversão padrão, nada no quadro vai ser capaz de dar-lhe os comprimentos. Eu sei que embutir é geralmente desaprovado, mas neste caso é somente em um lugar e vai ser a opção mais simples.
Outras dicas
De acordo com a Como criar Tipo de TypeCode ... , você não pode (sem um interruptor exaustiva). Claro que a outra direção (Tipo> TypeCode) é trivial.