我有这个带有集合定义的自定义词典:
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);
}
答案 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>());