c#中添加字典的问题

本文关键字:问题 字典 添加 | 更新日期: 2023-09-27 18:02:52

好吧,所以我已经很努力了,但我似乎找不到我的问题的答案。我的代码一定有问题,如果有人能帮我看一下,那就太有帮助了。

       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"的形式输入,并将其添加到字典中。我添加计数部分是为了调试,无论我添加了多少个单词,它总是说我在字典中只有一个单词。你应该能看出来我是新来的,所以请温柔一点。由于

c#中添加字典的问题

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

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

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

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

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)."); 
        }
    }
}

您需要遍历if (intext.Contains...{}块,否则它只运行一次。如果循环遍历它并且只在Dictionary中获得一个条目,这是因为您在以下场景中不断在作用域中重新分配它:

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

所以你需要把它移到外面,如果这是你的情况

我不确定你的输入字符串是什么或者你需要如何使用它,尽管我认为你正在寻找分割输入字符串并沿着这一行循环…

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;
}