Considerare il seguente scenario.polimorfismo, generici e tipi anonimi C#
Documento -> Sezione -> Corpo -> Articoli
documento ha sezioni, una sezione contiene un corpo. Un corpo ha un testo e un elenco di elementi. Gli articoli sono di cosa si tratta. A volte gli elementi sono un elenco di base di stringhe, ma a volte gli elementi contengono un elenco di un tipo di dati personalizzato.
Quindi:
public class Document
{
public Section[] Sections{get;set;}
}
public class Section
{
public SectionType Type{get;set;}
public Body {get;set;}
}
public class Body
{
//I want the items to be depending on the section type.
//If e.g. the sectiontype is experience, I want the Items to be created with type //Experience. If sectiontype is default I want the Items to be created with type string
public Items<T> Items {get;set;}
}
public class Items<T>:IEnumerable, IEnumerator
{
// Do all the plumbing for creating an enumerable collection
}
public class Experience
{
public string Prop1{get;set;}
public string Prop2 {get;set;}
}
non posso farlo funzionare. La proprietà Items deve essere definita da un tipo per la compilazione. Sono bloccato qui. Posso sistemarlo facilmente creando una classe Section per ognuno dei tipi di sezioni che uso. Ma il fatto è che tutto il resto del codice è lo stesso e tutte le operazioni sulla sezione saranno uguali. L'unica cosa diversa è il tipo di elenco utilizzato nel corpo.
Qual è la migliore pratica per questo. Ho provato generici, astrazioni, ecc. Posso farlo funzionare se si crea la classe Items direttamente dal programma chiamante, ma non riesco a farlo funzionare se Items è dichiarato una proprietà su un'altra classe.
Posso fornire maggiori dettagli se necessario. Grazie ragazzi e ragazze per il vostro supporto.
Forse menzionare tipo anonimo nel titolo è inutile qui ... – digEmAll
Se sectionType è una proprietà sulla classe Sezione, quale impatto ha questo sulla cambiando gli oggetti che sono nel corpo? Hai bisogno di ricrearli? Penso che dovresti rendere le sezioni class generiche. – Kell
C'è una ragione per cui non stai semplicemente creando una classe astratta di oggetti, quindi hai qualcosa come un oggetto String e altri tipi di articoli personalizzati di cui hai bisogno, quindi rappresenti la proprietà Items semplicemente come una lista- ? Per me sembra un modo naturale per rappresentare la struttura che stai descrivendo. –
SpaceghostAli