繁体   English   中英

将字符串迭代到字典

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM