C# 访问和设置嵌套字典值
我正在处理一个个人C#项目,我想使用嵌套字典来处理我的settings.ini文件值的存储,以便将来读取/写入我的settings.ini文件。My settings.ini文件包括: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
[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];