优雅的方式做词典<key,collection <value =“”>&gt; </key,>

时间:2009-08-06 19:15:06

标签: c# types

将关键对象的地图存储到值对象集合的最佳方法是什么? 我可以用

Dictionary<KeyType, Collection<ValueType>>

但这种做法往往涉及大量的内务管理,并使代码混乱。

Lookup类型几乎是我正在寻找的结果,但它是不可变的,没有构造函数。我可以创建自己的自定义类,但它似乎应该存在于框架某处

3 个答案:

答案 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> - 这正是您想要的。