如何在 C# 中添加、更新、保存和删除键列表<KeyValuePair<int, string>>

How to Add, Update, Save and Delete Key List<KeyValuePair<int, string>> in C#

具体问题 我想更新键值对,如果我删除了一些东西,它应该被删除并且剩余的项目被保存,但是当我删除一个键时,每个值都会被删除。我只想删除一个特定的值并保留剩余的值并将其保存回来。

已编辑: 显然,如果我删除一个键,每个值都会被删除,我想从键中删除一个特定的值并保留键中的剩余值。

注意:如果我的问题有误,您可以提出修改建议。

一点背景知识:

第一个 ComboBox 属于类别 A,第二个 ComboBox 属于类别 B。 当我select类别A时,我生成一些连续剧,同时我添加到comboBox2用于显示并添加到键值对。

同B类

当我select类别A时,我只想看到类别A中生成的连续剧,当我select类别B时,我只想看到类别B中生成的连续剧。

这就是我使用 KeyValuePair 的原因,我找不到任何其他更好的解决方案,我用 json 保存文件,当我加载应用程序时,我重新加载文件并用数据重新填充我的组合框.

现在我想使用一个特定的序列号,当序列号被使用时,我想将它从组合框中删除,同时从键值对中删除并保存回现有数据。

这里是图片,可以更好地理解它。

全局变量:

    List<KeyValuePair<int, string>> vals = new List<KeyValuePair<int, string>>();
    int from;
    int to;
    int result;

以下是添加List的代码。

添加到组合框并添加到键值对。

 for (int i = 0; i <= result; i++)
     {
       string item = Convert.ToString(from + i);
       comboBox1.Items.Add(item);
       vals.Add(new KeyValuePair<int, string>(0, item));
     }

保存代码:

  string json = JsonConvert.SerializeObject(vals);
        using (StreamWriter sw = File.CreateText("C:\Dictionary.txt"))
        {
            sw.Write(json);
        }   

重新填充组合框

string jsonToRead = File.ReadAllText("c:\Dictionary.txt");

        List<KeyValuePair<int, string>> myDictionaryReconstructed = 
            JsonConvert.DeserializeObject<List<KeyValuePair<int, string>>>(jsonToRead);

        if (comboBox1.SelectedIndex == 0)
        {
            comboBox2.Items.Clear();
            foreach (var item in myDictionaryReconstructed)
            {
                if (item.Key == 0) //If Key value is 0, if it is CategoryA
                {
                    comboBox2.Items.Add(item.Value);
                    comboBox2.Refresh();
                }
            }

如何删除密钥并保存剩余数据

// 这可能是错误的做法。 // 我想删除在 comboBox2

中 selected 的那个值
   private void DeleteButton_Click(object sender, EventArgs e)
    {
   // Deserialise it from Disk back to a Dictionary
        string jsonToRead = File.ReadAllText("c:\Dictionary.txt");

        List<KeyValuePair<int, string>> myDictionaryReconstructed =
            JsonConvert.DeserializeObject<List<KeyValuePair<int, string>>>(jsonToRead);

        foreach (var item in myDictionaryReconstructed)
        {
            if (item.Key == 0) //If Key value is 0, if it is CategoryA
            {
                if (item.Value == this.comboBox1.SelectedValue.ToString())
                {
                    vals.Remove(new KeyValuePair<int, string>(0, comboBox1.SelectedValue.ToString()));
                }
            }

        }

        string json = JsonConvert.SerializeObject(myDictionaryReconstructed);
        using (StreamWriter sw = File.CreateText("C:\Dictionary.txt"))
        {
            sw.Write(json);
        }


    }

我认为它与 foreach 循环有关,对我来说似乎是不必要的。

能否尝试删除

中的 foreach 块
DeleteButton_Click 

事件并将其替换为

vals.Remove(new KeyValuePair<int, string>(0, comboBox1.SelectedItem.ToString()));