Передача общего определения коллекции в качестве параметра типа - или как использовать «Список <>» в качестве параметра типа - PullRequest
1 голос
/ 30 сентября 2011

Я постараюсь быть как можно более простым.

Я хочу быть в состоянии сделать что-то вроде этого:

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Есть ли способ сделать что-то подобное без повторения параметра типа элемента коллекции и без использования отражения?

1 Ответ

2 голосов
/ 30 сентября 2011

Нет, это невозможно в рамках ваших ограничений. Открытые универсальные типы могут появляться только в качестве параметров оператора typeof. Они не разрешены нигде в вашем источнике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...