2011-07-19 53 views
0

好吧,我看起来很难,但我似乎无法找到我的问题的答案。我的代码中必定存在一个问题,如果有人可以帮我看看,这将会非常有帮助。添加到C#字典中的问题#

 Dictionary<string, string> keylist = new Dictionary<string, string>(); 
      if (intext.Contains("addkey") && intext.Contains("def")) 
     { 

      string[] keywords = intext.Split(' '); 
      string key1 = keywords[1]; 
      string def2 = keywords[3]; 
      string fkey = key1.Replace("_", " "); 
      string fdef = def2.Replace("_", " "); 
      keylist.Add(fkey, fdef); 
      say("Phrase '" + fkey + "' added with response '" + fdef + "'"); 
      say("Your Dictionary contains " + keylist.Count.ToString() + " word(s)."); 
      ////////////////////////////// 



     } 

我所要做的就是以“addkey key_here def definition_here”的形式输入并将其添加到字典中。为了调试的目的,我添加了计数部分,并且总是说我无论添加了多少个字符,在字典中只有1个单词。你可以告诉我是新人,所以请温和。感谢

+2

你的字典中只有一个元素,因为你的代码只运行一次。 –

+0

从我所看到的情况来看,您只需将1对添加到新的字典中,我只希望它有1个项目。 –

+0

也许它可能会更好地解释你想要达到的目标,但在使用你可能没有意识到的字典时会遇到一些问题。 –

回答

1
Dictionary<string, string> keylist = new Dictionary<string, string>(); 

我假设,每当用户进入某种命令的该功能被调用(例如通过命令行,当他们点击一个按钮,等等)。如果是这种情况,则需要将keylist字典更高一级(例如,作为实例变量)。代码现在的方式是,每次函数被调用时创建一个新的字典,并将密钥添加到它;这就是为什么只有一个。

如果您有错误判断或过分简化您的问题的风险,只需将上面引用的函数体外部的行移动即可。

+0

+1 11秒:) –

+0

谢谢你,它完美的作品。这是回答问题的记录时间。我不相信我没有看到。 – oakley

+0

@oakley:很高兴为你效劳!如果这解决了您的问题,请不要忘记将其标记为已接受的答案,以便具有类似问题的其他人能够轻松找到解决方案。 –

1

在给出的代码中,每次运行时都重新创建字典。

Dictionary<string, string> keylist = new Dictionary<string, string>(); 

将变量keylist重新初始化为空字典。

请尝试将该行移出该函数外部。由于您使用的WinForms,你可以创建一个类级别的变量,像这样:

public partial class Form1 : Form 
{ 
    Dictionary<string, string> keylist = new Dictionary<string, string>();  

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    public void YourFunction(string intext) 
    { 
     if (intext.Contains("addkey") && intext.Contains("def"))   
     {    
      string[] keywords = intext.Split(' ');    
      string key1 = keywords[1];    
      string def2 = keywords[3];    
      string fkey = key1.Replace("_", " ");    
      string fdef = def2.Replace("_", " ");    
      keylist.Add(fkey, fdef);    
      say("Phrase '" + fkey + "' added with response '" + fdef + "'");    
      say("Your Dictionary contains " + keylist.Count.ToString() + " word(s)."); 
     } 
    } 

} 
0

您通过if (intext.Contains...{}块需要循环或只运行一次。如果你是循环通过它,只得到在字典的一个条目,那是因为你一直在范围内的情况下重新分配它,例如:

while(true) { 
    Dictionary<string, string> keylist = new Dictionary<string,string>(); 
    //... 
} 

所以你需要外移动它,如果这是你的案件。

0

我不知道你输入的字符串到底是什么,或者你需要如何使用它,但我认为你正在寻找通过沿着这条线拆分输入字符串和环...

private Dictionary<string, string> GetData(string intext) 
{ 
    Dictionary<string, string> keylist = new Dictionary<string, string>(); 

    string[] keywords = intext.Split(' '); 
    foreach (string s in keywords) 
    { 
     if (s.Contains("addkey") && s.Contains("def")) 
     { 
      string fkey = key1.Replace("_", " "); 
      string fdef = def2.Replace("_", " "); 

      keylist.Add(fkey, fdef); 
      say("Phrase '" + fkey + "' added with response '" + fdef + "'"); 
      say("Your Dictionary contains " + keylist.Count.ToString() + " word(s)."); 
     } 
    } 

    return keylist; 
}