多个嵌套字典

时间:2012-02-23 13:55:01

标签: c# dictionary

在我的应用程序中,可以连接多个服务器。每个服务器都可以有更多的存储库,可以在应用程序中打开。我有一些对象用于包装在具体服务器中的存储库上调用webservices的逻辑,它们是单例(这是不重要的)。 该应用程序通常会处理0-5个服务器,每个服务器将有0-5个存储库。对象数量为5。

我想将这些对象存储在类中,但是

Dictionary<string, Dictionary<string, Dictionary<type, IServiceProvider>>>

看起来有点奇怪......我只是偏执狂或这真的是个坏主意吗?

3 个答案:

答案 0 :(得分:3)

声明有点长且难以阅读,但这样就可以了。

为了更好的可读性和可用性,请考虑创建一个表示此结构并具有更好命名的类或结构。

答案 1 :(得分:2)

取决于。一方面,Dictionary(或其他关联容器)可能感觉像是工作的正确工具。另一方面,即使您的访问模式与这样的结构完美匹配,您仍然不需要性能;所有数据结构对于如此少量的项目来说都是快速的。

因此,如果您实际上并未在代码中实际索引该字典树,则可以使用List这些字典,并在每次需要时执行线性搜索:

class Wrapper
{
    public string Server { get; set; }
    public string Repository { get; set; }
    public Type Type { get; set; }
    public IServiceProvider Provider { get; set; }
}

由于您的特定访问模式,这也可能无法使您的代码更具可读性。可视化(或原型化)两种方法并选择一种感觉更好的方法。

答案 2 :(得分:2)

只要您适当地定义相等和哈希码(或者为了简单起见,甚至使用结构代码),您可以拥有聚合键:

class ServiceProperties
{
    public int ServerId {get;set;}
    public int RepositoryId {get;set;}
    public type ServiceType {get;set;}

    //define equality, hashcode
}

现在您可以使用Dictionary<ServiceProperties, IServiceProvider>