Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c语言中添加到字典的问题#_C#_Winforms_Arrays_Dictionary - Fatal编程技术网

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

C# 在c语言中添加到字典的问题#,c#,winforms,arrays,dictionary,C#,Winforms,Arrays,Dictionary,好的,所以我努力寻找,但我似乎找不到我的问题的答案。我的代码中一定有问题,如果有人能帮我看一下,那将非常有帮助 Dictionary<string, string> keylist = new Dictionary<string, string>(); if (intext.Contains("addkey") && intext.Contains("def")) { stri

好的,所以我努力寻找,但我似乎找不到我的问题的答案。我的代码中一定有问题,如果有人能帮我看一下,那将非常有帮助

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



        }
Dictionary keylist=new Dictionary();
if(intext.Contains(“addkey”)&intext.Contains(“def”))
{
字符串[]关键字=intext.Split(“”);
字符串key1=关键字[1];
字符串def2=关键字[3];
字符串fkey=key1.Replace(““,”);
字符串fdef=def2.Replace(“”,“”);
keylist.Add(fkey,fdef);
说(“短语“+fkey+””加上响应“+fdef+””);
说(“你的字典包含”+keylist.Count.ToString()+“单词”);
//////////////////////////////
}
我只想让它以“addkey_here def definition_here”的形式接受输入,并将其添加到字典中。我添加计数部分是为了调试,它总是说,无论我添加了多少个单词,字典中只有一个单词。你可能知道我是新来的,所以请温柔一点。谢谢

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


冒着错误判断或过分简化问题的风险,将我上面引用的行移到函数体之外应该会有所帮助。

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

Dictionary<string, string> keylist = new Dictionary<string, string>();
Dictionary keylist=new Dictionary();
将变量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)."); 
        }
    }

}
公共部分类表单1:表单
{
字典键列表=新字典();
公共表格1()
{
初始化组件();
}
公共函数(字符串intext)
{
if(intext.Contains(“addkey”)&intext.Contains(“def”))
{            
字符串[]关键字=intext.Split(“”);
字符串key1=关键字[1];
字符串def2=关键字[3];
字符串fkey=key1.Replace(““,”);
字符串fdef=def2.Replace(“”,“”);
keylist.Add(fkey,fdef);
说(“短语“+fkey+””加上响应“+fdef+””);
说(“你的字典包含”+keylist.Count.ToString()+“单词”);
}
}
}

您需要循环通过
if(intext.Contains…{}
块,或者它只运行一次。如果您循环通过它并且在字典中只得到一个条目,这是因为您在场景中不断在范围内重新分配它,例如:

while(true) {
    Dictionary<string, string> keylist = new Dictionary<string,string>();
    //...
}
while(true){
字典键列表=新字典();
//...
}

因此,如果是您的情况,您需要将其移到外部。

我不确定您的输入字符串是什么,或者您需要如何使用它,尽管我认为您希望拆分输入字符串并沿着这条线循环

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;
}
专用字典GetData(字符串intext)
{
字典键列表=新字典();
字符串[]关键字=intext.Split(“”);
foreach(关键字中的字符串s)
{
如果(s.Contains(“addkey”)&s.Contains(“def”))
{
字符串fkey=key1.Replace(““,”);
字符串fdef=def2.Replace(“”,“”);
keylist.Add(fkey,fdef);
说(“短语“+fkey+””加上响应“+fdef+””);
说(“你的字典包含”+keylist.Count.ToString()+“单词”);
}
}
返回键列表;
}

您的字典中只有一个元素,因为您的代码只运行过一次。据我所知,您只向一个新字典添加了一对,我只希望它包含一项。也许最好解释一下您试图实现的目标,使用字典时可能会遇到一些您可能没有意识到的问题。谢谢是你,它工作得很好。这一定是回答问题的记录时间。我不敢相信我没有看到。@oakley:很高兴它对你有用!如果这解决了你的问题,请不要忘记将其标记为已接受的答案,以便其他有类似问题的人能够轻松找到解决方案。