如何跨多个命名空间C#定义和访问嵌套字典数据[重复]

Posted

技术标签:

【中文标题】如何跨多个命名空间C#定义和访问嵌套字典数据[重复]【英文标题】:How to define & access a nested dictionary data across multiple namespace C# [duplicate] 【发布时间】:2016-01-31 12:35:30 【问题描述】:

我有以下数据,我想以优雅的方式定义并快速访问。

Dictionary<string, string> myDictionary =  new Dictionary<string, string>

   "a", "1",
   "b"  "2"
;

现在“1”和“2”在 2 个不同的模块 x 和 y 中定义。 我在这里考虑嵌套字典。我正在寻找优雅的定义方式。

我的想法:

    //FileA -  Namespace1
    Dictionary<string, string> dcA = new Dictionary<string, string>
    
        "LOC1", "ADDR1",
        "LOC2", "ADDR2"
    ;

    //FileB -  NameSpace1
    Dictionary<string, string> dcB = new Dictionary<string, string>
    
        "LOC3", "ADD3",
        "LOC4", "ADD4"
    ;

    //FileX - NameSpace 2
    static Dictionary<string, string> dc1 = new Dictionary<string, Dictionary<string, string>>
    
        "LOC1", dcA.GetValue("LOC1",
        "LOC2", dcA.GetValue("LOC2",
        "LOC3", dcA.GetValue("LOC3",
        "LOC4", dcA.GetValue("LOC4",
    ;

    string myString;
    string key = "LOC1";
    if (!dc1.TryGetValue(key, out myString))
    
        throw new InvalidDataException("Can't find the your Addr for this LOC");
    
    Console.WriteLine("myString : 0", myString)

    //Expected output as 
    myString : ADDR1

是的,我想将 2 个字典组合成一个新字典。问题是我可以像这样 dcA.GetValue("LOC1" 访问新字典的值。试图看看是否有更好的解决方案或我根本没有考虑的数据结构。

【问题讨论】:

我不完全确定你在这里问什么。 所以您想将 Namespace1 中的 Dictionary A 和 B 合并到 Namespace2 中的新字典中? 是的,我想将 2 个字典组合到一个新字典中。问题是我可以像这样 dcA.GetValue("LOC1" 访问新字典的值。试图看看是否有更好的解决方案或我根本没有考虑的数据结构。 【参考方案1】:

您可以通过 2 个选项来执行此操作。

选项 1。 //FileX - 命名空间 2

Dictionary<string, string> dc1 = dcA;

foreach (var item in dcB)
 
    dc1[item.Key] = item.Value;     

选项 2。

Dictionary<string, string> dc1 = new Dictionary<string,string>();

foreach (var item in dcA)

     dc1[item.Key] = item.Value;

foreach (var item in dcB)

    dc1[item.Key] = item.Value;

选项 1 将比选项 2 更快。因为在选项 1 中只有一个 for 循环和选项在初始化期间复制第一个字典。

【讨论】:

我不确定您如何推荐“选项 1”,因为 OP 没有指定是否可以修改源字典。

以上是关于如何跨多个命名空间C#定义和访问嵌套字典数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C# - 在共享命名空间中跨文件使用命名空间

C#命名空间的嵌套

如何防止从命名空间内访问类?

类的声明和访问级别

C# 常用 命名空间都有哪些 这些命名空间是的作用是?

C#命名空间大全详细教程