我仍然使用Wintellect的PowerCollections库,即使它已经老化而且没有维护,因为它在覆盖标准MS Collections库中留下的漏洞方面做得很好。但LINQ和C#4.0准备取代PowerCollections ......
我很高兴发现System.Linq.Lookup,因为它应该替换我的工具包中的Wintellect.PowerCollections.MultiDictionary
。但是Lookup
似乎是不可改变的!是的,您是否只能通过调用ToLookup
创建一个填充的查找?
答案 0 :(得分:2)
是的,您只能通过致电Lookup
来创建ToLookup
。当然,它的不可变性意味着它很容易在线程之间共享等。
如果您想要一个可变版本,您可以始终使用Edulinq implementation作为起点。它内部可变,但外部不可变 - 如果Microsoft实现以类似的方式工作,我也不会感到惊讶。
就我个人而言,我很少想要改变查找 - 我宁愿首先对输入执行适当的转换。我鼓励你以这种方式思考 - 我发现自己希望从其他集合中获得更好的不变性支持(例如Dictionary
),而不是我希望Lookup
是可变的:)
答案 1 :(得分:1)
这是正确的。 Lookup
是不可变的,您可以使用Linq ToLookup()
扩展方法创建实例。从技术上讲,即使这个事实也是一个实现细节,因为该方法返回一个ILookup
接口,将来可能会被其他一些具体类实现。