2012-03-19 78 views
1

此程序旨在读取csv文件并从中创建一个字典,然后用它来翻译输入到文本框(txtINPUT)中的单词并将结果输出到另一个文本框(txtOutput)。C中的词典#

该程序不会翻译任何东西,并始终输出“找不到翻译”。 我从来没有用过字典类,所以我不知道问题来自哪里。

感谢您给我的任何帮助。

Dictionary<string, string> dictionary; 

    private void CreateDictionary() 
    { 
     //Load file 
     List<string> list = new List<string>(); 
     using (StreamReader reader = new StreamReader("dictionarylist.csv")) 
     { 
      string line; 
      while ((line = reader.ReadLine()) != null) 
      { 
       //Add to dictionary 
       dictionary = new Dictionary<string, string>(); 
       string[] split = line.Split(','); 
       dictionary.Add(split[0], split[1]); 
      } 
     } 
    } 
     private void btnTranslate_Click(object sender, EventArgs e) 
    { 
     CreateDictionary(); 

     string outputString = null; 
     if (dictionary.TryGetValue(txtInput.Text, out outputString)) 
     { 
      txtOutput.Text = outputString; 
     } 
     else 
     { 
      txtOutput.Text = ("No translation found"); 
     } 

    } 
+2

我真的推荐一个更好标题为您的问题...尝试一些更具体到您的问题。 – aardvarkk 2012-03-19 18:55:15

+1

您为每一行读取的字典创建一个新的字典 – devio 2012-03-19 18:55:55

+1

您应该在调试器中运行该字典,并使用watch-window仔细比较放入字典的值与您用于TryGetValue的值。您还应该向我们展示至少一部分dictionarylist.csv – abelenky 2012-03-19 18:56:28

回答

3

您正在创建一个字典的新实例,每个循环周期中,每次读线时间基本上覆盖它。移动此行圈外:

// Instantiate a dictionary 
var map = new Dictionary<string, string>(); 

而且为什么不能加载字典一次,你可以加载它每个按钮的点击,这是效率不高。使用LINQ ToDictionary()

>=.NET 3)同:

usign System.Linq; 
var map = File.ReadAllLines() 
       .Select(l => 
       { 
        var pair = l.Split(','); 
        return new { First = pair[0], Second = pair[1] } 
       }) 
       .ToDictionary(k => k.First, v => v.Second); 
+0

谢谢,我完全错过了。 – user1279252 2012-03-19 19:10:23

1

在while循环,创建一个新的字典每单次!

你想创建一个字典,所有的条目添加到:

while ((line = reader.ReadLine()) != null) 
{ 
    //Add to dictionary 
    dictionary = new Dictionary<string, string>(); /* DON'T CREATE NEW DICTIONARIES */ 
    string[] split = line.Split(','); 
    dictionary.Add(split[0], split[1]); 
} 

你应该更喜欢这样做:

List<string> list = new List<string>(); 
dictionary = new Dictionary<string, string>(); /* CREATE ONE DICTIONARY */ 
using (StreamReader reader = new StreamReader("dictionarylist.csv")) 
{ 
    string line; 
    while ((line = reader.ReadLine()) != null) 
    { 
     string[] split = line.Split(','); 
     dictionary.Add(split[0], split[1]); 
    } 
}