2017-08-10 12 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.Add()は、キーがすでに存在する場合にスローします。索引構文を使用すると、前の値がオーバーライドされます。 –

+0

Dictionary.Clear();そのような簡単な解決策! – IcyPopTarts

+0

それで解決しましたか?私は答えとしてそれを入力することができます。編集:あまりにも遅く、他の人がそれを入力しました。 –

答えて

3

を許可これはないです:

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を再利用していないことを確認してください。

valueのクラスが必要であり、keyは常に一意である必要があります。 valueプロパティは一意である必要はなく、keyのみです。

これは許可されています

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

あなたはDictionary<int, double[]>をクリアするか、追加する前に、キーがすでに存在するかどうかを確認することができますいずれか

dictionary.Add(1, new double[] {10, 12.5, 7}) 
dictionary.Add(1, new double[] {1, 14.5, 2}) 
関連する問題