Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问和设置嵌套字典值_C#_Dictionary_Nested - Fatal编程技术网

C# 访问和设置嵌套字典值

C# 访问和设置嵌套字典值,c#,dictionary,nested,C#,Dictionary,Nested,我正在处理一个个人C#项目,我想使用嵌套字典来处理我的settings.ini文件值的存储,以便将来读取/写入我的settings.ini文件。My settings.ini文件包括: [Application] AutoShowSetting=Log SettingsIniDirectory=Application LogDirectory=Application 我使用两个for each循环从settings.ini文件中读取信息,如下所示: public void s

我正在处理一个个人C#项目,我想使用嵌套字典来处理我的settings.ini文件值的存储,以便将来读取/写入我的settings.ini文件。My settings.ini文件包括:

[Application]  
AutoShowSetting=Log  
SettingsIniDirectory=Application  
LogDirectory=Application  

我使用两个for each循环从settings.ini文件中读取信息,如下所示:

public void storeIniValues()
{


    int i = 0;
    string[] sectionNames = iniFile.GetSectionNames();

    foreach (string section in sectionNames)
    {
        string[] keys = iniFile.GetKeyNames(section);
        foreach (string key in keys)
        {                  
            string keyValue = iniFile.GetString(section, key, "");
            i++;

        }         

    }
}
foreach获取这些值,并将这些值放入它们所尊重的字符串变量中。我希望在通过foreach循环时获取这些值,并将这些值放入字典中,以便以后读取/写入/更新settings.ini文件。到目前为止,我创建了一本词典:

static Dictionary<string, Dictionary<string, string>> iniSettings =
    new Dictionary<string, Dictionary<string, string>>();
静态字典设置=
新字典();
如何从嵌套字典(如so)中访问ini值
iniSettings[“应用程序”][“自动显示设置”]以获取相应的值(在本例中为“日志”)?另外,当foreach循环循环时,如何向嵌套字典添加值(settingsIni[section][key]=keyValue)? 我不知道从哪里开始尝试,因为我从未使用过嵌套字典

编辑

我忘了提到settings.ini文件将保存用于填充复选框、文本框等的值。

假设您要继续沿着此路径,而不是使用.NET中已内置的configurationmanager或注释中已提到的现有ini文件包装,要将值添加到内存结构中,需要执行以下操作:

当你有一个部分,你需要添加它

iniSettings.Add(section, new Dictionary<string, string>());
这将导致结构类似于

+ section1
   + key1, value
   + key2, value
+ section2
   + key1, value
等等。您可以通过调用

bool sectionExists = iniSettings.ContainsKey(section);
这将返回一个bool。当然,钥匙也是如此:

bool keyExists = iniSettings[section].ContainsKey(key);
要访问它们,您只需使用您已经想到的:

var value = iniSettings[section][key];

或者,您可以使用C#applications中已经存在的完美的app.config结构但是既然你已经在这里了,你在最后一段中提出的解决方案有什么问题吗?您在尝试时是否遇到任何错误?或者在实现时使用此处讨论的INI包装类:@J.Steen:iniSettings[section][key]=keyValue;我收到此错误:mscorlib.dll中发生“System.Collections.Generic.KeyNotFoundException”类型的未处理异常。其他信息:字典中不存在给定的密钥。我假设我正在搜索键的值,而不是设置值?您需要首先通过调用
add(key,value)
将键和值添加到词典中。所以,说
ini设置[section]。添加(键,值)假设您已经通过调用
iniSettings.Add(section,new Dictionary())添加了节。请原谅第一段的判断,我只是想说明还有其他选择。=)我很好奇我是否能再深入一本字典。例如:
staticdictionary=newdictionary();iniSettings.Add(节,新字典())如果可能的话,我该如何添加到嵌套字典中?您可以随意深入,只需初始化每个小节,正如我在上面的代码示例中所示。然而,如果您想要无限的深度,您可能需要考虑为其创建一个专用的类结构。我相信你会明白的
var value = iniSettings[section][key];