0

我想在解析一个大型 XML 文件后创建一个嵌套的 ConcurrentDictionary。运行下面的代码时我得到的是最内层(tmpDictionaryDid)字典为空。

我想我没有正确保存字典或错误地加载它们,但我无法弄清楚什么是不正确的。

甚至可以用 ConcurrentDictionary 解决它还是我应该尝试其他解决方案?

public void temp22db()
    {
        ConcurrentDictionary<string, ConcurrentDictionary<string, string>> dictionary22 = new ConcurrentDictionary<string, ConcurrentDictionary<string, string>>();
        try
        {
            ConcurrentDictionary<string, string> did = new ConcurrentDictionary<string, string>();

            did.TryAdd("F186 1", "test1");
            did.TryAdd("F186 2", "test2");
            dictionary22.TryAdd("F186", did);

            did.TryAdd("EDA0 1", "test3");
            did.TryAdd("EDA0 2", "test4");
            dictionary22.TryAdd("EDA0", did);

            string test;
            did.TryGetValue("EDA0 1", out test);
            Helper.logInWindow("This works " + test);
        }
        catch (Exception e)
        {
            Helper.logInWindow("SDDBTemp: " + e.Message);
        }
        ecuDictionary2.TryAdd("1638", dictionary22);
    }

public string getDIDInterpretation()
    {
        string outStr = "";
        ConcurrentDictionary<string, ConcurrentDictionary<string, string>> tmpDictionary;
        ecuDictionary2.TryGetValue("1638", out tmpDictionary);

        if (tmpDictionary != null)
        {
            ConcurrentDictionary<string, string> tmpDictionaryDid;
            tmpDictionary.TryGetValue("EDA0", out tmpDictionaryDid);

            if (tmpDictionaryDid != null)
            {
                tmpDictionaryDid.TryGetValue("EDA0 1", out outStr);
            }
        }

        Helper.logInWindow("Why U no work? " + outStr);
        return outStr;
    }
4

1 回答 1

0

You should be using it like this instead: (The parent ConcurrentDictionary will allow concurrency to your internal dictionaries)

    public static void temp22db()
    {
        Dictionary<string, Dictionary<string, string>> dictionary22 = new Dictionary<string, Dictionary<string, string>>();
        try
        {
            Dictionary<string, string> did = new Dictionary<string, string>();

            did.Add("F186 1", "test1");
            did.Add("F186 2", "test2");
            dictionary22.Add("F186", did);

            did.Add("EDA0 1", "test3");
            did.Add("EDA0 2", "test4");
            dictionary22.Add("EDA0", did);

            string test;
            did.TryGetValue("EDA0 1", out test);
            Helper.logInWindow("This works " + test);
        }
        catch (Exception e)
        {
            Helper.logInWindow("SDDBTemp: " + e.Message);
        }
        ecuDictionary2.TryAdd("1638", dictionary22);
    }

    public static string getDIDInterpretation()
    {
        string outStr = "";
        Dictionary<string, Dictionary<string, string>> tmpDictionary;
        ecuDictionary2.TryGetValue("1638", out tmpDictionary);

        if (tmpDictionary != null)
        {
            Dictionary<string, string> tmpDictionaryDid;
            tmpDictionary.TryGetValue("EDA0", out tmpDictionaryDid);

            if (tmpDictionaryDid != null)
            {
                tmpDictionaryDid.TryGetValue("EDA0 1", out outStr);
            }
        }

        Helper.logInWindow("Why U no work? " + outStr);
        return outStr;
    }
于 2015-04-09T13:02:16.060 回答