如何在 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()));
具体问题 我想更新键值对,如果我删除了一些东西,它应该被删除并且剩余的项目被保存,但是当我删除一个键时,每个值都会被删除。我只想删除一个特定的值并保留剩余的值并将其保存回来。
已编辑: 显然,如果我删除一个键,每个值都会被删除,我想从键中删除一个特定的值并保留键中的剩余值。
注意:如果我的问题有误,您可以提出修改建议。
一点背景知识:
第一个 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()));