Cómo obtener la longitud de un TypeCode
-
06-07-2019 - |
Pregunta
Estoy seguro de que esta es una pregunta fácil, pero no tengo una respuesta. Aquí está el senario y la pregunta.
Tengo una matriz que se almacenó usando un formato particular. El formato contiene un registro de encabezado con múltiples registros detallados a continuación. El encabezado del registro me dice qué TypeCode se usó para almacenar los datos, por ejemplo Int32.
Tengo una rutina que toma una matriz de bytes [] y convierte los datos de bytes a su formato correcto en C #. Esta rutina necesita la cantidad adecuada de bytes para que la conversión sea exitosa.
P. Entonces, ¿cómo puedo obtener la longitud de bytes del TypeCode dado para pasar a la función Convertir sin tener que codificar la longitud de cada tipo?
Solución
Dado que TypeCode
es solo una enumeración de un conjunto fijo de valores, puede codificar fácilmente un diccionario de ellos, por ejemplo
private static readonly Dictionary<TypeCode,int> TypeCodeLength =
new Dictionary<TypeCode,int> {
{ TypeCode.Int32, 4 },
{ TypeCode.Int64, 8 },
{ TypeCode.Char, 2 },
// etc
}
(Una solución equivalente sería usar una declaración de cambio / caso; realmente son equivalentes si solo incluye valores).
Algunos, como string
y object
serán variables, y otros dependerán de cómo codifique cosas como DateTime
.
A menos que esto esté utilizando una conversión estándar, nada en el marco podrá darle las longitudes. Sé que la codificación dura generalmente está mal vista, pero en este caso solo está en un lugar y será la opción más simple.
Otros consejos
De acuerdo con Cómo crear Type desde TypeCode ... , no puedes (sin un interruptor exhaustivo). Por supuesto, la otra dirección (Type- > TypeCode) es trivial.