Я думаю, вы, вероятно, должны написать свой класс-обертку в соответствии с вашими потребностями. Я имею в виду, если вам нужно хранить словарь предварительно составленных списков, Dictionary<int, List<type>>
должно подойти, если это только частная собственность. Вы не должны раскрывать это, хотя публично, поскольку очевидно, что оно предоставляет слишком много информации, и вы не можете привести ее к IDictionary<int, IList<T>>
или чему-то подобному из-за отсутствия ковариации.
Ваша лучшая ставка была бы примерно такой:
class MyWrapper<T>()
{
private Dictionary<int, List<T>> dictionary { get; set; }
public MyWrapper() { dictionary = new Dictionary<int, List<T>>(); }
// Adds a new item to the collection
public void Add(int key, T item)
{
List<T> list = null;
if (!dictionary.TryGetValue(key, out list))
{
// If dictionary does not contain the key, we need to create a new list
list = new List<T>();
dictionary.Add(key, list);
}
list.Add(item);
}
public IEnumerable<T> this[int key]
{
get
{
List<T> list = null;
// We just return an empty list if the key is not found
if (!dictionary.TryGetValue(key, out list)) return new List<T>();
else return list;
}
}
}
Очевидно, что ваши потребности могут быть другими, вам может понадобиться реализовать пару интерфейсов и т. Д., Но это общая идея.