System.Linq.Lookup vs. Wintellect.PowerCollections.MultiDictionary

时间:2011-08-09 19:04:16

标签: c# linq

我仍然使用Wintellect的PowerCollections库,即使它已经老化而且没有维护,因为它在覆盖标准MS Collections库中留下的漏洞方面做得很好。但LINQ和C#4.0准备取代PowerCollections ......

我很高兴发现System.Linq.Lookup,因为它应该替换我的工具包中的Wintellect.PowerCollections.MultiDictionary。但是Lookup似乎是不可改变的!是的,您是否只能通过调用ToLookup创建一个填充的查找?

2 个答案:

答案 0 :(得分:2)

是的,您只能通过致电Lookup来创建ToLookup。当然,它的不可变性意味着它很容易在线程之间共享等。

如果您想要一个可变版本,您可以始终使用Edulinq implementation作为起点。它内部可变,但外部不可变 - 如果Microsoft实现以类似的方式工作,我也不会感到惊讶。

就我个人而言,我很少想要改变查找 - 我宁愿首先对输入执行适当的转换。我鼓励你以这种方式思考 - 我发现自己希望从其他集合中获得更好的不变性支持(例如Dictionary),而不是我希望Lookup是可变的:)

答案 1 :(得分:1)

这是正确的。 Lookup是不可变的,您可以使用Linq ToLookup()扩展方法创建实例。从技术上讲,即使这个事实也是一个实现细节,因为该方法返回一个ILookup接口,将来可能会被其他一些具体类实现。