在c#中添加到字典的问题

时间:2011-07-19 16:58:57

标签: c# winforms arrays dictionary

好吧所以我看起来很难但我似乎无法找到问题的答案。我的代码中一定存在问题,如果有人可以为我查看它会非常有用。

       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个单词,无论我添加了多少。你可能会说我是新人,所以请保持温柔。感谢

4 个答案:

答案 0 :(得分:1)

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

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

冒着错误判断或过度简化问题的风险,只需将我在上面引用的行移到函数体之外就可以了。

答案 1 :(得分:1)

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

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

将变量键列表重新初始化为空字典。

而是尝试将该线移到函数之外。由于您使用的是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)."); 
        }
    }

}

答案 2 :(得分:0)

您需要遍历if (intext.Contains...{}块,否则它只运行一次。如果您循环遍历它并且只在Dictionary中输入一个条目,那是因为您在以下场景中将其重新分配到范围内:

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

所以你需要将它移到外面,如果那是你的情况。

答案 3 :(得分: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;
}