在我的代码中使用词典中的许多词典

时间:2011-11-24 23:09:54

标签: c# dictionary

我正在使用很多包含其他字典集合的字典集合,如:

Dictionary<Guid, List<string>>()

Dictionary<Guid, Dictionary<Guid, List<string>>>()

我正在遍历这些地图,并在我的代码中传递参数。

这似乎是一个坏主意,因为你现在无法真正扩展这些集合的性质。

我应该把它们包装在一个类中吗?

5 个答案:

答案 0 :(得分:6)

你遇到这样的限制吗?你的程序难以改变/调试吗?如果是这样,重构。否则,利润:你是一个务实的程序员,。

那就是说,我可以看到立即改善的空间:

IDictionary<Guid, List<string>> x;

IDictionary<Guid, IDictionary<Guid, List<string>> y = new Dictionary<Guid, IDictionary<Guid, List<string>>();

答案 1 :(得分:5)

我会说是的,专门为它创建一个类。然后,您可以根据自己的使用情况添加/不实施方法,而不是解决使用Dictionary时使用的任何限制。

听起来你想要一个像树一样的结构。

答案 2 :(得分:2)

至少,将“臭”数据结构包装在一个类中,这样您就可以通过提供一个干净的API来查询/修改数据来封装其实现,而无需任何客户端代码就存储细节做任何事情。< / p>

然后,您将来可以随时更改数据结构的实现。如果你现在不这样做,你可能会后悔当你有10或100倍的客户端代码,并且重构太昂贵/痛苦。

您可能会发现,只要您将其整齐地封装起来并且它可以正常工作,您觉得它有臭味的事实并不真正相关 - 只要代码执行它需要做的事情并且可以维护,就有没有必要投入更多的时间。 (我不是在提倡保持脏代码,但我们必须平衡商业现实与我们实现理论完善的愿望 - 如果代码有效并且没有引起任何问题,那么它可能并不总是很好地利用你的时间来改进或重构它。相反,您可能会发现通过将其封装在类中并将脏实现与其客户隔离来简单地中和风险就足够了。

答案 3 :(得分:1)

.NET 4.0引入了Tuple,一个更加可滥用的数据结构,就像它在开始时看起来一样好,它带来了很多痛苦,应该明智地使用。

字典在某种程度上不那么邪恶,因为它用于快速元素访问,而不仅仅是作为胶水而不是创建类。我相信你对字典的使用没有任何问题,如果这些字典在本地用于某种计算或某种方法的方法,但是当你开始将它们作为参数传递时,它们会变得不那么清楚。如果是这种情况,我认为你需要为它创建一个类。

答案 4 :(得分:1)

因为字典类型是引用类型,所以这里的情况并不是很糟糕,但为了清楚代码,请考虑定义一个新类型,从Dictionary<Guid,List<string>>派生,只是为了缩短您正在编写和编写的代码它易读。该课程应如下所示:

internal class MyWrapper : Dictionary<Guid, List<string>>
{
}

或者如果您与IDictionary保持联系很重要,那么继续进行复合设计,将Dictionary<Guid, List<string>>实例包装到实现IDictionary<Guid, List<string>>的类中,然后委托所有方法包装词典。