泛型类继承自Dictionary with Collection

时间:2014-11-18 13:42:40

标签: c# generics

我有这个带有集合定义的自定义词典:

class CollectionDictionary<K, C, V> : Dictionary<K, C> where C : ICollection<V>, new()

并像这样使用它(例如):

CollectionDictionary<Guid, HashSet<int>, int> sample;

但对我来说,这个双int似乎很尴尬,是否有可能绕过这个并且只写:

CollectionDictionary<Guid, HashSet<int>> sample;

以便编译器知道V只能是一个int?

修改

我需要这个类来抽象这个方法

public void Add(K key, V value)
{
    if (!this.ContainsKey(key))
    {
        base.Add(key, new C());
    }
    this[key].Add(value);
}

1 个答案:

答案 0 :(得分:1)

你可以这样做

class CollectionDictionary<K, C> : Dictionary<K, ICollection<C>>

它删除了使ICollection具有空构造函数的约束。

为了能够创建新的集合,您可以要求代表执行此操作。但在你的情况下,我认为你原来的解决方案会产生更少的样板代码。

// ctor
public CollectionDictionary(Func<ICollection<C>> collectionCreator)

// Create
base.Add(key, _collectionCreator());

// Init
new CollectionDictionary<Guid, int>(() => new HashSet<int>());