Как получить длину TypeCode - PullRequest
1 голос
/ 23 июня 2009

Я уверен, что это простой вопрос, но у меня нет ответа на. Вот сенарио и вопрос.

У меня есть массив, который был сохранен с использованием в определенном формате. Формат содержит запись заголовка, за которой следует множество подробных записей. Заголовок записи говорит мне, какой TypeCode использовался для хранения данных, например, Int32.

У меня есть подпрограмма, которая принимает массив byte [] и преобразует байтовые данные обратно в правильный формат в C #. Эта процедура требует правильного количества байтов для успешного преобразования.

Q. Итак, как я могу получить длину байтов из заданного TypeCode для передачи в функцию Convert без необходимости жесткого кодирования длины для каждого типа?

Ответы [ 2 ]

3 голосов
/ 23 июня 2009

Учитывая, что TypeCode - это просто перечисление фиксированного набора значений, вы можете легко жестко закодировать их словарь, например,

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

(Эквивалентным решением было бы использование оператора switch / case - они действительно эквивалентны, если вы просто включаете значения.)

Некоторые, такие как string и object будут переменными, а другие будут зависеть от того, как вы кодируете такие вещи, как DateTime.

Если это не использует стандартное преобразование, ничто в фреймворке не сможет дать вам длины. Я знаю, что жесткое кодирование обычно осуждается, но в этом случае оно только в одном месте и будет самым простым вариантом.

0 голосов
/ 23 июня 2009

Согласно Как создать Type из TypeCode ... , вы не можете (без исчерпывающего переключения). Конечно, другое направление (Type-> TypeCode) тривиально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...