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