Limitazione di una lunghezza di stringa su una proprietà

Questa domanda è sorta quando stavo cercando di capire un problema più grande che, per semplicità, sto omettendo.

Devo rappresentare una certa struttura dati in C #. È un protocollo che verrà utilizzato per comunicare con un sistema esterno. Come tale, ha una sequenza di stringhe con lunghezze e numeri interi predefiniti (o altri dati più complicati). Assumiamo:

SYSTEM : four chars APPLICATION : eight chars ID : four-byte integer 

Ora, il mio modo preferito per rappresentare questo sarebbe usare le stringhe, quindi

 class Message { string System {get; set; }; // four characters only! string Application {get; set; }; // eight chars int Id {get; set; }; } 

Il problema è: devo assicurarmi che la stringa non abbia più della lunghezza predefinita. Inoltre, questa intestazione avrà effettivamente decimi di campi, quelli cambieranno di tanto in tanto (stiamo ancora decidendo il layout del messaggio).

Qual è il modo migliore per descrivere una tale struttura? Ad esempio, ho pensato di utilizzare un XML con la descrizione dei dati e utilizzare la riflessione per creare una class che aderisce all’implementazione (poiché ho bisogno di accedervi programmaticamente).

E, come ho detto, ci sono più problemi. Ho altri tipi di dati che limitano il numero di caratteri / cifre …

Per i principianti: il problema di tutta la lunghezza. Questo è facilmente risolvibile non usando le proprietà automatiche, ma dichiarando il proprio campo e scrivendo la proprietà come “vecchio stile”. È quindi ansible convalidare il requisito nel setter e generare un’eccezione o scartare il nuovo valore se non è valido.

Per la struttura che cambia: se non è ansible entrare e modificare la class, è ansible scrivere una soluzione che utilizza un dizionario (beh, forse uno per tipo di dati che si desidera memorizzare) per associare un nome a un valore. Aggiungi un file di qualche tipo (forse XML) che descrive i campi consentiti, il loro tipo e i requisiti di convalida.

Tuttavia, se cambia solo perché non hai ancora deciso una struttura definitiva, probabilmente preferirei semplicemente cambiare la class – se non hai bisogno di quel tipo di struttura dynamic quando distribuisci la tua applicazione, sembra uno spreco di tempo, poiché probabilmente finirai per passare più tempo a scrivere le cose dinamiche che a modificare la class.