Tenga en cuenta la situación siguiente.polimorfismo, genéricos y tipos anónimos C#
Documento -> Sección -> Cuerpo -> Los productos que
documento tiene secciones, una sección contiene un cuerpo. Un cuerpo tiene texto y una lista de elementos. Los ítems son de lo que se trata la pregunta. A veces, los elementos son una lista básica de cadenas, pero a veces los elementos contienen una lista de un tipo de datos personalizado.
Así:
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;}
}
no puedo conseguir que esto funcione. La propiedad Artículos tiene que estar definida por un tipo para compilar. Estoy atrapado aquí. Puedo arreglar esto fácilmente creando una clase de sección para cada tipo de sección que uso. Pero el problema es que el resto del código es el mismo y todas las operaciones en la sección serán las mismas. Lo único diferente es el tipo de lista utilizada en el Cuerpo.
¿Cuál es la mejor práctica para esto. He intentado con genéricos, abstracción, etc. Puedo hacer que funcione si creo la clase Elementos directamente desde el programa de llamada, pero no puedo hacer que funcione si se declara una propiedad en otra clase.
Puedo proporcionar más detalles si es necesario. Gracias chicos y chicas por vuestro apoyo.
Quizá mencionar tipo anónimo en el título es inútil aquí ... – digEmAll
Si sectionType es una propiedad de la clase de la sección, ¿qué impacto tiene esto sobre cambiando los elementos que están en el cuerpo? ¿Necesitas recrearlos? Creo que deberías hacer que las secciones sean genéricas. – Kell
¿Hay alguna razón por la que no solo esté haciendo una clase abstracta de Artículo y luego tenga algo así como un StringItem y cualquier otro tipo de Artículo personalizado que necesite y luego represente su propiedad Artículos simplemente como una Lista- ? Para mí, eso parece una forma natural de representar la estructura que describes. –
SpaceghostAli