以某种方式将超过 2 个项目存储到字典时程序崩溃
Program crashing when storing more than 2 items into Dictionary in a certain way
很难很好地描述标题中的情况,但这是要点。
我有一个 ComboBox,其中充满了来自第一个字典的代码隐藏的复选框。
然后我从组合框中拉出文本,然后根据键(组合框文本块中的名称)找到值
它们以逗号分隔,所以我使用的是正则表达式分隔值。
第一个工作正常,然后添加第二个。但是当我尝试添加更多时它爆炸了。
Dictionary<string, string> selectedCharacters = new Dictionary<string, string>();
private void button1_Click(object sender, RoutedEventArgs e)
{
string[] w = SplitWords(MC.Text);
selectedCharacters.Clear();
foreach (string s in w)
{
string fileName = "";
Items.TryGetValue(s, out fileName);
selectedCharacters.Add(s, fileName);
}
foreach (var item in selectedCharacters)
{
testBlock.Text += string.Format(item.Key + " " +
item.Value + "\n");
}
}
static string[] SplitWords(string s)
{
return Regex.Split(s, @"(.*?),");
}
testBlock 是我用来在屏幕上显示它的文本块。我在 names/keys 中还有其他字符,例如 ' 和一些空格等等,所以我搞定了一个寻找逗号分隔的正则表达式。
我觉得 2 很好,但 3 就不行了,这很奇怪。
通过评论部分后,我注意到问题出在重复键上。问题是由于 regex
答案后半部分所述的失败
来自MSDN
ArgumentException : An element with the same key already exists in the Dictionary.
一种解决方案是在将键添加到字典之前检查键是否存在。
Dictionary<string, string> selectedCharacters = new Dictionary<string, string>();
private void button1_Click(object sender, RoutedEventArgs e)
{
string[] w = SplitWords(MC.Text);
selectedCharacters.Clear();
foreach (string s in w)
{
// Check whether KEY exists
if(!selectedCharacters.ContainsKey(s)){
string fileName = "";
Items.TryGetValue(s, out fileName);
selectedCharacters.Add(s, fileName);
}
}
foreach (var item in selectedCharacters)
{
testBlock.Text += string.Format(item.Key + " " +
item.Value + "\n");
}
}
static string[] SplitWords(string s)
{
return s.Split(','); //It would do the same as regex
}
编辑:问题出在你的正则表达式上,运行下面的代码
String test = "me,you,they,are";
String[] arr= Regex.Split(test, @"(.*?),");
foreach (string item in arr)
{
Console.WriteLine("Word : {0}",item);
}
输出:错误输出,空字符串如下
word :
word : me
word :
word : you
(...)
解决方案:使用String.Split()
String[] arr= test.Split(',');
其他:通过 this 关于使用正则表达式进行拆分的回答
很难很好地描述标题中的情况,但这是要点。
我有一个 ComboBox,其中充满了来自第一个字典的代码隐藏的复选框。
然后我从组合框中拉出文本,然后根据键(组合框文本块中的名称)找到值
它们以逗号分隔,所以我使用的是正则表达式分隔值。
第一个工作正常,然后添加第二个。但是当我尝试添加更多时它爆炸了。
Dictionary<string, string> selectedCharacters = new Dictionary<string, string>();
private void button1_Click(object sender, RoutedEventArgs e)
{
string[] w = SplitWords(MC.Text);
selectedCharacters.Clear();
foreach (string s in w)
{
string fileName = "";
Items.TryGetValue(s, out fileName);
selectedCharacters.Add(s, fileName);
}
foreach (var item in selectedCharacters)
{
testBlock.Text += string.Format(item.Key + " " +
item.Value + "\n");
}
}
static string[] SplitWords(string s)
{
return Regex.Split(s, @"(.*?),");
}
testBlock 是我用来在屏幕上显示它的文本块。我在 names/keys 中还有其他字符,例如 ' 和一些空格等等,所以我搞定了一个寻找逗号分隔的正则表达式。
我觉得 2 很好,但 3 就不行了,这很奇怪。
通过评论部分后,我注意到问题出在重复键上。问题是由于 regex
答案后半部分所述的失败
来自MSDN
ArgumentException : An element with the same key already exists in the Dictionary.
一种解决方案是在将键添加到字典之前检查键是否存在。
Dictionary<string, string> selectedCharacters = new Dictionary<string, string>();
private void button1_Click(object sender, RoutedEventArgs e)
{
string[] w = SplitWords(MC.Text);
selectedCharacters.Clear();
foreach (string s in w)
{
// Check whether KEY exists
if(!selectedCharacters.ContainsKey(s)){
string fileName = "";
Items.TryGetValue(s, out fileName);
selectedCharacters.Add(s, fileName);
}
}
foreach (var item in selectedCharacters)
{
testBlock.Text += string.Format(item.Key + " " +
item.Value + "\n");
}
}
static string[] SplitWords(string s)
{
return s.Split(','); //It would do the same as regex
}
编辑:问题出在你的正则表达式上,运行下面的代码
String test = "me,you,they,are";
String[] arr= Regex.Split(test, @"(.*?),");
foreach (string item in arr)
{
Console.WriteLine("Word : {0}",item);
}
输出:错误输出,空字符串如下
word :
word : me
word :
word : you
(...)
解决方案:使用String.Split()
String[] arr= test.Split(',');
其他:通过 this 关于使用正则表达式进行拆分的回答