2017-08-10 42 views
0

我正在为用户表单上的开始值和结束值之间的所有数字执行计算。我的问题是,用户往往需要计算相同的值,并延长开始时间或延长结束时间,这样做会引发错误在每个按钮上创建新词典按

具有相同密钥的项目已添加

这是我的语法 - 我需要更改以消除此错误?

public partial class Test 
{ 
    Dictionary<int, double[]> dictionary = new Dictionary<int, double[]>(); 

    private void btnCalculate_Click(object sender, EventArgs e) 
    { 
     int start = txtStart.Text; 
     int end = Convert.ToInt32(txtEnd.Text)+1; 

     int[] ag = Enumerable.Range(start, end - start).ToArray(); 

     foreach (int a in ag) 
     { 
      dictionary.Add(a, new double[] { a*10, a*15, a*20 }); 
     } 
    } 
} 
+0

,你有没有考虑清除字典(即dictionary.Clear())第一? Dictionary.Add()在键已经存在时抛出。如果使用索引语法,则以前的值将被覆盖/替换为不例外。 –

+0

Dictionary.Clear();这样简单的解决方案! – IcyPopTarts

+0

这是否解决了它?我可以输入它作为答案。编辑:太晚了,其他人已经进入了。 –

回答

3

您可以清除Dictionary<int, double[]>或检查,如果键已经存在添加前:

public partial class Test 
{ 
    Dictionary<int, double[]> dictionary = new Dictionary<int, double[]>(); 

    private void btnCalculate_Click(object sender, EventArgs e) 
    { 
     dictionary.Clear(); 

     int start = txtStart.Text; 
     int end = Convert.ToInt32(txtEnd.Text)+1; 

     int[] ag = Enumerable.Range(start, end - start).ToArray(); 

     foreach (int a in ag) 
     { 
      dictionary.Add(a, new double[] { a*10, a*15, a*20 }); 
     } 
    } 
} 

或:

public partial class Test 
{ 
    Dictionary<int, double[]> dictionary = new Dictionary<int, double[]>(); 

    private void btnCalculate_Click(object sender, EventArgs e) 
    { 
     int start = txtStart.Text; 
     int end = Convert.ToInt32(txtEnd.Text)+1; 

     int[] ag = Enumerable.Range(start, end - start).ToArray(); 

     foreach (int a in ag) 
     { 
      if(!dictionary.ContainsKey(a)) 
       dictionary.Add(a, new double[] { a*10, a*15, a*20 }); 
     } 
    } 
} 

我不知道您的使用情况到底是什么,但如果你生成每次按下按钮时,这些值这应该解决您的问题

0

确保你是不是在你的Dictionary重用相同key两次。

Dictionary类需要keyvaluekey必须始终是唯一的。 value属性不需要是唯一的,只有key

这是允许的:

dictionary.Add(1, new double[] {10, 12.5, 7}) 
dictionary.Add(2, new double[] {1, 14.5, 2}) 

这是允许

dictionary.Add(1, new double[] {10, 12.5, 7}) 
dictionary.Add(1, new double[] {1, 14.5, 2}) 
相关问题