2013-11-26 1 views
0

У меня есть класс ActiveList<T>: ObservableCollection<T>, что я хочу, чтобы хранить в словаре с ключом Type, который является T из ActiveList, что-то вроде:Как хранить коллекцию ObservableCollection <T> с различными типами для T?

Dictionary<Type, ActiveList<T>> 

Конечно словарь не может быть набран, как это должно удовлетворить различные типы для T. Это может помочь, если вы знаете, что T ограничен в XTimeEntity, так что я мог бы рассмотреть возможность сделать словарь:

Dictionary<Type, ActiveList<XTimeEntity>> 

, но как бы я бросил ActiveList<XtimeEntity> к ActiveList<T>, когда я хочу Dictionary[T]?

+1

'ActiveList ' и 'ActiveList ' разные. Так вы не можете. Все, что вы можете сделать, это использовать общий интерфейс, который не является общим или общим, который является ковариантным. –

+0

@SriramSakthivel Я знаю, что не могу делать то, что я описываю, я хочу. Вот почему я задаю этот вопрос. Не могли бы вы, пожалуйста, предложить подходящий ковариантный интерфейс? – ProfK

ответ

0

Есть ли общий доступ ко всем ActiveLists? Чем может быть Dictionary<Type, IActiveList>. Но вам все равно придется отбрасывать полученное значение.

0

Почему бы не использовать интерфейс?

Определите интерфейс (IActive), чтобы объявить метод, который вы хотите реализовать, а затем выполните его.

public class Acitve<T> : IActive 

Добавить его в Dictionary<Type, IActive>.

+0

Ближайший я мог бы прийти к IObservableCollection (нетипизированного) является: 'интерфейс IActiveList общественности: INotifyCollectionChanged, INotifyPropertyChanged' , как те два уведомления об изменениях Я получаю от' 'ObservableCollection для. – ProfK

+0

Да, я имею в виду объявление метода, который вы хотите вызвать снаружи, и вы можете делать все в методе. 'Public interface IActive {void Invoke(); } 'Если вы наследуете класс' ObservableCollection ', вы также можете вызывать методы, принадлежащие классу. – Teddy

Смежные вопросы