Domanda

Sono sicuro che questa è una domanda facile, ma non ho una risposta per. Ecco il senario e la domanda.

Ho un array che è stato archiviato usando in un formato particolare. Il formato contiene un record di intestazione con numerosi record di dettagli che lo seguono. L'intestazione del record indica quale TypeCode è stato utilizzato per archiviare i dati, ad esempio Int32.

Ho una routine che prende un array byte [] e converte i dati byte nel formato corretto in C #. Questa routine richiede il numero corretto di byte per la riuscita della conversione.

Q. Quindi, come posso ottenere la lunghezza dei byte dal TypeCode dato per passare alla funzione Convert senza dover codificare la lunghezza per ogni tipo?

È stato utile?

Soluzione

Dato che TypeCode è solo un elenco di una serie fissa di valori, è possibile codificare facilmente un dizionario di essi, ad esempio

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

(Una soluzione equivalente sarebbe quella di utilizzare un'istruzione switch / case - sono davvero equivalenti se includi solo valori.)

Alcuni, come string e object saranno comunque variabili - e altri dipenderanno da come codifichi cose come DateTime .

A meno che questo non stia usando una conversione standard, nulla nel framework sarà in grado di darti le lunghezze. So che l'hard-coding è generalmente disapprovato, ma in questo caso è solo in un posto e sarà l'opzione più semplice.

Altri suggerimenti

Secondo Come creare un tipo da TypeCode ... , non puoi (senza un interruttore esaustivo). Ovviamente l'altra direzione (Type- > TypeCode) è banale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top