目前在解析我为小游戏制作的模板方面做了一些工作。
看起来像这样:
HEADER:NPC
NAME:Goblin
NAMEPLURAL:Goblins
NAMECHILD:Gob'in
NAMECHILDPLURAL:Gob'ins
MOVEMENT0:WALK
MOVEMENT1:RUN
MOVEMENT2:SWIM
BASEHP:30
BASEMANA:0
BASELEVEL:1?9
在我的解析器中,我执行以下操作:
class TemplateParser
{
public String folder { get; set; }
public TemplateParser(String folder)
{
this.folder = folder;
}
public Dictionary<String, Dictionary<String, String>> Parse()
{
Dictionary<String, Dictionary<String, String>> parsedTemplates =
new Dictionary<String, Dictionary<String, String>>();
String[] files = Directory.GetFiles(folder);
StreamReader reader;
foreach (String s in files)
{
try
{
String line = "";
reader = new StreamReader(s);
Dictionary<String, String> attributes = new Dictionary<String, String>();
while((line = reader.ReadLine()) != null)
{
string[] split = line.Split(':');
attributes.Add(split[0], split[1]);
}
parsedTemplates.Add(Path.GetFileNameWithoutExtension(s), attributes);
reader.Close();
}
catch (IOException ioe)
{
Log.LogMessage(ioe.Message, ELogFlag.CRITICAL);
}
}
return parsedTemplates;
}
}
现在问题在于:
当我试图浏览这个集合时(在运行Parse()
之后)我想做一点测试并写出包含“Goblin”字典中所有信息的字典。
到目前为止,我所有的尝试都是徒劳的,就像我templates["Goblin"]
时一样,我希望我能找到一本我可以用foreach()
迭代的字典,但它不会让我这样做。它说有关转换不可能的事情。然后我寻找一个枚举器,但我无法让一个枚举器迭代。
我错过了什么?
答案 0 :(得分:2)
没有看到你打印字典的代码,因为编译器“说了一些关于转换不可能的事情”,看来你的代码没有在你的循环中使用正确的元素类型。
以下是如何迭代字典字典,无论其键类型如何:
var dictOfDictionaries = Parse();
foreach (var dictPair in dictOfDictionaries) {
Console.WriteLine("Key: {0}", dictPair.Key);
foreach (var innerPair in dictPair.Value) {
Console.WriteLine("\t{0}:{1}", innerPair.Key, innerPair.Value);
}
}
答案 1 :(得分:1)
以下是一个例子:
Dictionary<int,Dicationary<string,char>> lol = new Dictionary<int,Dicationary<string,char>>();
foreach( KeyValuePair<int, Dictionary<string,char>> kvp in lol)
{
int test = kvp.Key;
foreach(KeyValuePair<string,char> kvp2 in kvp.Value)
{
string s = kvp.Key;
char c = kvp.Value;
}
}