簡體   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