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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top