Как получить длину кода типа
-
06-07-2019 - |
Вопрос
Я уверен, что это простой вопрос, но у меня нет ответа на него.Вот сенарио и вопрос.
У меня есть массив, который был сохранен с использованием определенного формата.Формат содержит запись заголовка с несколькими последующими за ней подробными записями.Заголовок записи сообщает мне, какой код типа использовался для хранения данных, например 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) тривиально.