Я постараюсь быть как можно более простым.
Я хочу быть в состоянии сделать что-то вроде этого:
var mylookup = new ModifiableLookup<MyClass, int, List<> >();
var myhashlookup = new ModifiableLookup<MyClass, int, HashSet<> >();
Имея общий класс по этим направлениям:
class ModifiableLookup<TKey, TElement, TElementCollection<> > : ILookup<TKey, TElement>
where TElementCollection<> : ICollection<TElement>, new()
{
private Dictionary<TKey, TElementCollection<TElement> > data;
/// ... so on and so forth
}
Но, увы, это не работает ...
Обходной путь - повторить параметр типа:
var mylookup = new ModifiableLookup<MyClass, int, List<int> >();
///...
class ModifiableLookup<TKey, TElement, TElementCollection> : ILookup<TKey, TElement>
where TElementCollection : ICollection<TElement>, new()
IsЕсть ли способ сделать что-то подобное без повторения параметра типа элемента коллекции и без использования отражения?