Question

Je suis sûr que la question est facile, mais je n'ai pas de réponse à vous donner. Voici le senario et la question.

J'ai un tableau qui a été stocké en utilisant un format particulier. Le format contient un enregistrement d'en-tête suivi de plusieurs enregistrements de détail. L'en-tête de l'enregistrement m'indique quel TypeCode a été utilisé pour stocker les données, par exemple Int32.

J'ai une routine qui prend un tableau d'octets [] et convertit les données d'octets au format approprié en C #. Cette routine a besoin du nombre d'octets approprié pour réussir la conversion.

Q. Alors, comment puis-je obtenir la longueur en octets du TypeCode donné pour la passer à la fonction Convert sans avoir à coder en dur la longueur pour chaque type?

Était-ce utile?

La solution

Etant donné que TypeCode est simplement une énumération d'un ensemble fixe de valeurs, vous pouvez facilement coder en dur un dictionnaire, par exemple.

private static readonly Dictionary<TypeCode,int> TypeCodeLength =
    new Dictionary<TypeCode,int> {
    { TypeCode.Int32, 4 },
    { TypeCode.Int64, 8 },
    { TypeCode.Char, 2 },
    // etc
}

(Une solution équivalente consisterait à utiliser une instruction switch / case - elles sont vraiment équivalentes si vous incluez simplement des valeurs.)

Certains, comme chaîne et objet seront variables - et d'autres dépendront de la manière dont vous coderez des éléments tels que DateTime .

Sauf si cela utilise une conversion standard, rien dans le framework ne pourra vous donner les longueurs. Je sais que la codification en dur est généralement mal vue, mais dans ce cas, elle n’est qu’à un seul endroit et elle sera l’option la plus simple.

Autres conseils

Selon Comment créer un type à partir de TypeCode ... , vous ne pouvez pas (sans un commutateur exhaustif). Bien entendu, l’autre direction (Type- > TypeCode) est triviale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top