此程序用于读取csv文件并从中创建字典,然后用于将输入的单词翻译成文本框(txtINPUT)并将结果输出到另一个文本框(txtOutput)。
该程序不会翻译任何内容并始终输出“未找到翻译”。 我之前从未使用过字典类,因此我不知道问题的来源。
感谢您提供任何帮助。
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");
}
}
答案 0 :(得分:3)
您正在为每个循环周期创建一个新的Dictionary实例,每次读取一行时基本上都会覆盖它。将此行移出循环:
// Instantiate a dictionary
var map = new Dictionary<string, string>();
另外为什么不加载字典一次,你加载每个按钮点击,这是不高效的。
(>=.NET 3
)使用LINQ ToDictionary()
:
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);
答案 1 :(得分: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]);
}
}