首页 > 解决方案 > 需要帮助手动添加到字典

问题描述

我很困惑,我试图手动将条目添加到字典中,但它在第一个逗号处抛出错误。感谢您提供任何帮助。

        private Dictionary<string, Dictionary<string, string>> packData =
        new Dictionary<string, Dictionary<string, string>>()
        {
            {
                "Test", //issue here
                {
                    "Test" , "Test"
                }
            };
        };

在此处输入图像描述

标签: c#

解决方案


您需要明确说明内部字典:

    new Dictionary<string, Dictionary<string, string>>()
    {
        {
            "Test", 
            new Dictionary<string, string> 
            {
                "Test" , "Test"
            }
        };
    };

这里要遵循的规则是“想象一下,如果大括号中的东西被替换为对Add”的调用。在您的原始代码中,我们会将其降低为:

    temp = new Dictionary<string, Dictionary<string, string>>();
    temp.Add("Test", { "Test", "Test" });

这不是法律法规。但

    temp = new Dictionary<string, Dictionary<string, string>>();
    temp.Add("Test", new Dictionary<string, string>(){ "Test", "Test" });

是合法的,并且反过来对应于

    temp = new Dictionary<string, Dictionary<string, string>>();
    temp2 = new Dictionary<string, string>();
    temp2.Add("Test", "Test");
    temp.Add("Test", temp2);

当我感到困惑时,我经常发现它有助于将代码“降低”到更基本的形式以了解正在发生的事情。

在某些情况下,编译器更聪明地理解嵌套大括号的预期含义,就像在原始代码中一样,但不幸的是,这不是其中之一。有关支持和不支持的更多详细信息,请参阅规范;您需要搜索“对象初始化程序”和“集合初始化程序”。


推荐阅读