C# 在我的代码中使用字典中的许多字典

C# 在我的代码中使用字典中的许多字典,c#,dictionary,C#,Dictionary,我使用了许多包含其他字典集合的字典集合,如: Dictionary<Guid, List<string>>() Dictionary<Guid, Dictionary<Guid, List<string>>>() Dictionary() 字典() 我正在循环这些映射,并在代码中传递参数 这似乎是个坏主意,因为你现在无法真正扩展这些收藏的性质 我是否应该将它们包装在一个类中?我会说是的,专门为它创建一个类。然后,您可以根据自己的使

我使用了许多包含其他字典集合的字典集合,如:

Dictionary<Guid, List<string>>()

Dictionary<Guid, Dictionary<Guid, List<string>>>()
Dictionary()
字典()
我正在循环这些映射,并在代码中传递参数

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


我是否应该将它们包装在一个类中?

我会说是的,专门为它创建一个类。然后,您可以根据自己的使用情况添加/不实现方法,而不是绕过使用
字典
时遇到的任何限制


听起来你想要一个树状结构。

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

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

IDictionary<Guid, List<string>> x;

IDictionary<Guid, IDictionary<Guid, List<string>> y = new Dictionary<Guid, IDictionary<Guid, List<string>>();
i词典x;

IDictionary.NET4.0引入了Tuple,这是一种更易使用的数据结构,一开始看起来很好,但后来带来了很多痛苦,应该明智地使用


字典在这里不那么邪恶,因为它提供了快速的元素访问,而不仅仅是一个胶水,而不是创建类。我相信,如果这些字典在本地用于某个计算或其他方法中,但当您开始将它们作为参数传递时,它们变得不那么清晰,那么使用字典并没有什么错。如果是这样的话,我认为你需要为它创建一个类。

< p>因为字典类型是一个引用类型,这里你的情况不坏,但是为了代码清晰,考虑定义一个新的类型,从<代码>字典>代码>只是为了缩短你编写的代码并使其易于阅读。该类应如下所示:

internal class MyWrapper : Dictionary<Guid, List<string>>
{
}
内部类MyWrapper:字典
{
}
或者,如果坚持使用
IDictionary
很重要,那么继续进行复合设计,将
Dictionary
实例包装到实现
IDictionary
的类中,并将所有方法委托给包装好的字典。

至少,将“难闻”的数据结构包装在一个类中,因此,您可以通过提供一个干净的API来查询/修改数据,而无需任何客户机代码了解存储详细信息,从而封装其实现

然后,您可以在将来的任何时候自由更改数据结构的实现。如果您现在不这样做,您可能会在以后后悔,因为您有10到100倍的客户机代码,而且重构成本太高/太痛苦


你可能会发现,只要你把它封装得井井有条,而且它还能工作,你觉得它很臭的事实其实并不重要——只要代码做了它需要做的事情并且是可维护的,就没有必要在它上面投入更多的时间。(我并不主张保留肮脏的代码,但我们必须平衡商业现实和我们实现理论完美的愿望——如果代码有效并且没有造成任何问题,那么改进或重构它可能并不总是一个很好的利用时间的方法。相反,你可能会发现,通过将其封装在c语言中来消除风险lass并将肮脏的实现与其客户端隔离就足够了)

我认为这是一种代码味道,但你应该为它允许说“哟,老兄…”的这么多自我意识投票:p@bertzzie:我自己也想到了,但由于我忙着打磨我的新钻石,所以没能想出一个相当有趣的方法:)是一本叫做2D字典的字典吗?如果我能给Guid更多的含义,比如ProductID,那就更好了,但我不能。@codecompleting在这种情况下,重构:)只需聚合一个字典,并具有具有描述性名称的好的查询方法。没有太多的工作,你会知道什么时候你对它感到满意,就像你现在知道的那样,有什么事情困扰着你。