Рассмотрим следующий сценарий.Полиморфизм, дженерики и анонимные типы C#
Документ -> Раздел -> Кузов -> Элементы
Документ имеет секции, секция содержит тело. Тело имеет некоторый текст и список предметов. Вопрос в том, о чем идет речь. Иногда элементы являются основным списком строки, но иногда элементы содержат список пользовательского типа данных.
Итак:
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;}
}
я не могу получить эту работу. Элементы свойства должны быть определены типом для компиляции. Я застрял здесь. Я могу легко это исправить, создав класс Section для каждого из разделов, которые я использую. Но дело в том, что все остальные коды одинаковы, и все операции над секцией будут одинаковыми. Единственное отличие - это тип списка, который используется в теле.
Какова наилучшая практика для этого. Я пробовал дженерики, абстракции и т. Д. Я могу заставить его работать, если вы создаете класс Items непосредственно из вызывающей программы, но я не могу заставить его работать, если объекты объявлены как свойство в другом классе.
Я могу предоставить более подробную информацию в случае необходимости. Спасибо, ребята и девушки за вашу поддержку.
Может быть, упоминая анонимный тип в названии бесполезно здесь ... – digEmAll
Если sectionType это свойство в классе раздел, какое влияние изменение это оказывает на Элементы, находящиеся в теле? Вам нужно воссоздать их? Я думаю, вы должны сделать класс разделов общим. – Kell
Есть ли причина, по которой вы не просто создаете абстрактный класс элемента, а имеете что-то вроде StringItem и любых других настраиваемых типов элементов, которые вам нужны, а затем представляют свойство Items как просто список- ? Для меня это кажется естественным способом представления структуры, которую вы описываете. –
SpaceghostAli