[英]Itinerating Strings to Dictionary
我目前正在为我的公司开发C#工具,而我只是被卡在字典之外。
它是关于从.ini
文件读取并将节和键保存到Dictionary<string, string>
。
我在这里:
public void GetDataToDictrionary()
{
FileIniDataParser fileParser = new FileIniDataParser();
IniData data = fileParser.ReadFile("config.ini");
Dictionary<string, string> newDictionary = new Dictionary<string, string>();
foreach (SectionData section in data.Sections)
{
foreach (KeyData key in section.Keys)
newDictionary.Add(section.SectionName.ToString(), key.Value.ToString());
}
}
我知道newDictionary.Add
函数将引发一些Argument异常。
如果我直接使用以下命令从.Ini文件将其写入控制台:
foreach (SectionData section in data.Sections)
{
Console.WriteLine("[" + section.SectionName + "]");
foreach (KeyData key in section.Keys)
Console.WriteLine(key.KeyName + " = " + key.Value);`
}
它将输出为:
`* [NewCCReduced1]
名称= NewCCReduced1.cone.bombardier.com
ip地址= 10.167.21.11
macaddress = 000bab46edeb *`
.ini
文件具有以下结构,这完全没问题:
`* [NewCCReduced1] /部分名称
name = NewCCReduced1.cone.bombardier.com / KeyName = KeyValue
ipaddress = 10.167.21.11 / KeyName = KeyValue
macaddress = 000bab46edeb / KeyName =键值
/评论*`
你们中有人可能会想到如何解决该问题,例如将所有变量保存到字典中吗?
你说错了。 您正在尝试创建一个字典,使每个项目都具有与部分名称相同的键。 这将打破字典中唯一键的规则。
我认为您想要的是以下内容:
Dictionary<string, Dictionary<string,string>> newDictionary = new Dictionary<string, Dictionary<string,string>>();
foreach (SectionData section in data.Sections)
{
var keyDictionary = new Dictionary<string,string>();
foreach (KeyData key in section.Keys)
keyDictionary.Add(key.KeyName.ToString(),key.KeyValue.ToString());
newDictionary.Add(section.SectionName.ToString(), keyDictionary);
}
我没有测试以上内容,但应该可以。
因此,您对newDictionary.Add(section.SectionName.ToString(), key.Value.ToString());
调用newDictionary.Add(section.SectionName.ToString(), key.Value.ToString());
处于循环中,最多会将n
次添加到字典中。 您可以改用以下内容:
foreach (SectionData section in data.Sections)
{
newDirctionary.Add(section.SectionName.ToString(), new List<string());
foreach (KeyData key in section.Keys)
newDictionary[section.SectionName.ToString()].Add(key.Value.ToString());
}
请注意,您的字典( <string, List<string>
)具有一个列表作为值,以便存储多个键。
您的代码正在向字典添加重复键,这就是生成异常的原因。
newDictionary.Add(section.SectionName.ToString(), key.Value.ToString());
由于SectionName相同,因此您试图将两个不同的值放入一个字典条目中,这是不允许的。
由于这个原因,您两次添加了密钥,因此您遇到了异常。要解决您的问题,您可以使用字典字典,如下所示
Dictionary<string, Dictionary<string, string> > newDictionary = new Dictionary<string, Dictionary<string, string> >();
处理您的配置文件
foreach (var section in newDictionary)
{
//here you have the section name as a key
foreach (var param in section.Value)
{
// here you will got all the params values for every section
}
}
第一个字符串是您的部分名称作为键,第二个Dictionary将具有您的部分配置的键值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.