【问题标题】:Problem adding to dictionary in c#在 C# 中添加到字典的问题
【发布时间】:2011-07-19 16:58:56
【问题描述】:

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

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

【问题讨论】:

  • 您的字典中只有一个元素,因为您的代码只运行一次。
  • 据我所知,您只是将 1 对添加到新字典中,我只希望它有 1 项。
  • 也许最好解释一下您要达到的目标,使用字典时可能会出现一些您可能没有意识到的问题。

标签: c# winforms arrays dictionary


【解决方案1】:
Dictionary<string, string> keylist = new Dictionary<string, string>();

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

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

【讨论】:

  • 谢谢它完美的工作。这必须是回答问题的创纪录时间。我不敢相信我没有看到。
  • @oakley:很高兴它对你有用!如果这解决了您的问题,请不要忘记将其标记为已接受的答案,以便其他有类似问题的人能够轻松找到解决方案。
【解决方案2】:

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

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

}

【讨论】:

    【解决方案3】:

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

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

    所以你需要把它移到外面,如果你是这样的话。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2012-03-20
        • 2018-07-27
        • 2019-07-14
        • 1970-01-01
        • 1970-01-01
        • 2014-04-24
        相关资源
        最近更新 更多