полиморфизм, дженерики и анонимные типы C #

Рассмотрим следующий сценарий:

Документ -> Раздел -> Тело -> Элементы

Документ имеет разделы, раздел содержит тело. В теле есть текст и список элементов. Items - это то, о чем идет речь. Иногда элементы представляют собой основной список строк, но иногда элементы содержат список настраиваемого типа данных.

Итак:

    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;}
   }

Я не могу заставить это работать. Для компиляции свойство Items должно быть определено типом. Я застрял здесь. Я могу легко это исправить, создав класс Section для каждого типа разделов, который я использую. Но дело в том, что весь остальной код такой же, и все операции над разделом будут такими же. Единственное отличие - это тип списка, используемого в Body.

Что для этого лучше всего. Я пробовал универсальные шаблоны, абстракцию и т. Д. Я могу заставить его работать, создав класс Items непосредственно из вызывающей программы, но я не могу заставить его работать, если Items объявлено свойством в другом классе.

Я могу предоставить больше подробности при необходимости. Спасибо вам, парни и девушки, за вашу поддержку.

5
задан Mounhim 3 February 2011 в 17:10
поделиться