C #: свойство общего списка - PullRequest
1 голос
/ 27 ноября 2010

Я делаю UserControl, где любой может подключить список.

Внутренне этот список сортируется и программно добавляется элементы во внутренний ItemaSource.

Любой, кто хочет использовать этот UserControlнеобходимо использовать свойство ElementsDataSource

public List<T> ElementsDataSource {get;set;}

List<T> не работает / не компилируется, вместо этого я должен использовать List<object>.

Но тогда я должен привести объекты внутриElementsDataSource снова переходит к универсальному типу, когда я сортирую их внутренне и повторно использую их и т. Д. *

Как я могу предложить универсальное свойство List моему пользователю, как это делает .NET?

мой пользователь является плагином в List<Customer> или List<Department> и т. д. ... или я совершенно не прав и должен использовать List<Object>?

Ответы [ 3 ]

1 голос
/ 27 ноября 2010
1 голос
/ 27 ноября 2010

Если вы не хотите делать класс элемента управления универсальным (это ваше List<T> решение), то, возможно, вам следует попробовать List<ISomeInterface>, который реализуют все классы, используемые с этим элементом управления?

0 голосов
/ 27 ноября 2010

Обратите внимание, что .NET использует IEnumerable или Object в качестве типа такого свойства.Затем он использует рефлексию, чтобы решить, как обрабатывать данные.

Вместо этого вы можете потребовать, чтобы вызывающая сторона выполняла любую сортировку или фильтрацию, и просто предоставила вам подготовленный IEnumerable.иметь возможность отображать коллекцию объектов, и коллекция должна быть отсортирована внутри элемента управления, и коллекция должна иметь «естественный» порядок сортировки, тогда объект должен реализовывать интерфейс IComparable<T>.Вы могли бы тогда обнаружить это через переизбрание.Вы бы потребовали, чтобы коллекция реализовала и IEnumerable<T>, и IComparable<T>, чтобы вы могли выполнить "естественную" сортировку элементов в коллекции.

...