将关键对象的地图存储到值对象集合的最佳方法是什么? 我可以用
Dictionary<KeyType, Collection<ValueType>>
但这种做法往往涉及大量的内务管理,并使代码混乱。
Lookup类型几乎是我正在寻找的结果,但它是不可变的,没有构造函数。我可以创建自己的自定义类,但它似乎应该存在于框架某处。
答案 0 :(得分:5)
这是你最好的答案。使用Dictionary<KeyType, ICollection<ValueType>>
非常常见。使用var
关键字声明您的局部变量是整理的最佳方式。
除此之外,您唯一的选择是创建MultiDictionary<T,K>
类型。您也可以将其称为Lookup
并将其放在您自己的命名空间中?
编辑:Google表示您应该对现有实施进行审核:Multi-value Dictionary C# source code (.NET 3.5)。 BSD2许可证意味着您可以将其用于归属的商业应用程序。 :)
答案 1 :(得分:4)
对于整理,您还可以为特定的泛型类型添加别名:
using MultiDictionary = Dictionary<string, ICollection<int>>;
然后:
var foo = new MultiDictionary();
答案 2 :(得分:2)
在.NET 3.5中,有ILookup<Tkey,TValue>
和Lookup<TKey,TValue>
用于此目的;但是,默认实现是不可变的。我为MiscUtil写了一个可变的变体; EditableLookup<TKey,TValue>
- 这正是您想要的。