所以我有一个问题......我正在尝试将 5 个左右的双语词典以 HTML 格式合并为一个单一的多语言词典,以英语作为源语言。为此,我决定建立一个字典,并将每个非英语单词映射到它的英语对应项(键)[见下面的代码]。
1 public void ConsolidateDictionary(string directoryPath)
2 {
3 DirectoryInfo directory = new DirectoryInfo(directoryPath);
4 string key = string.Empty;
5 string value = string.Empty;
6 Dictionary<string, List<string>> languages =
new Dictionary<string, List<string>>();
7 List<string> temp = new List<string>();
8 foreach (FileInfo file in directory.EnumerateFiles())
9 {
10 HtmlDocument doc = new HtmlDocument();
11 doc.Load(file.FullName);
12
13 foreach (HtmlNode node in doc.DocumentNode.SelectNodes(".//wordunit"))
14 {
15 foreach (HtmlNode child in node.SelectNodes(".//word"))
16 {
17 if (child.Attributes["language"].Value == "EN")
18 {
19 key = child.OuterHtml.ToString();
20 }
21 else
22 {
23 value = child.OuterHtml.ToString();
24 }
25 }
26
27 if (key != null && value != null)
28 {
29 if (languages.ContainsKey(key))
30 {
31 foreach (var item in languages[key])
32 {
33 temp.Add(item);
34 }
35 temp.Add(value);
36 languages.Remove(key);
37 languages.Add(key, temp);
38 temp.Clear();
39 }
40 else
41 {
42 temp.Add(value);
43 languages.Add(key, temp);
44 temp.Clear();
45 }
46 }
47 }
48 }
49 WriteFile(languages);
50 }
基本上发生的事情是,在第 15 行的 foreach 循环的每次迭代之后,现有的字典值都被清空(但键仍然存在)。因此,假设在第 15 行循环的第一次迭代之后,字典(称为“语言”)包含key: <word language="EN">Hello</word> Value: <word language="ES">Hola</word>
:当第二次迭代到来时,该值将从字典“语言”中删除,只留下:
key: <word language="EN">Hello</word>
Value: null
key: <word language="EN">Goodbye</word>
Value: <word language="ES">Chao</word>
(Goodbye-Chao 对作为第二次迭代的键值对传入)。
是什么导致了这种奇怪的行为……据我所知,我根本没有覆盖字典中的值!有谁知道我哪里出错了?