Вопрос

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

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

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

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

Это было полезно?

Решение

Учитывая , что 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.

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top