Обновить значения словаря

1

Я хочу обновить значения в моем словаре. Это когда я ввожу новое значение в тот же ключ. Ключ будет тем же, и значение просто изменится. Значения обновляются с числовогоUpDown. Я сделал код, единственное, что я не могу понять, как я могу обновить значения? если возможно, можете ли вы посоветовать мне лучший способ обновить мои словари?

      //Create the dictionaries
     Dictionary<int, int> waytosave = new Dictionary<int, int>();
     Dictionary<int ,int> numberControls = new Dictionary<int,int>();

   private void btnRun_Click(object sender, EventArgs e)
    {
         ///Setting up the coordinates
     int xCoor;
     int yCoor;

     Random coor = new Random();
      int value =7;


         for (int x = 0; x < value; x++)
        {
            //Creating Random NumeircalUpdown.
            //Using those the user can change the values.
            NumericUpDown numiNumber = new NumericUpDown();

            xCoor = coor.Next(0, 500);
            yCoor = coor.Next(0, 500);


            numiNumber.Name = x.ToString();

            numiNumber.Location = new Point(xCoor, yCoor);

            numiNumber.Size = new System.Drawing.Size(50, 15);
            numiNumber.Maximum = 100;
            numiNumber.Minimum = 0;



           //Saveing the numericalUpdowns
             numberControls.Add(x, 0);
            this.pnlNodes.Controls.Add(numiNumber);

              //Make it respond to the clicking event
            numiNumber.Click += new EventHandler(GetNumUpDownValue);
        }

   } 

            //Get the values for the NumericUpDown
     public void GetNumUpDownValue(object sender, EventArgs e)
    {

        int iname = int.Parse(((NumericUpDown)sender).Name);
        int ivalue = (int)((NumericUpDown)sender).Value;
       ///
       ///My dictionary should updated here.
       ///How can i Update the value not the key.

            waytosave.Add(iname, ivalue);
            txtOutputs.Text += "\r\r\n" + "   Node # " + iname + " = " + waytosave[iname].ToString();

    }
Теги:
winforms

3 ответа

0
Лучший ответ

Проверьте, содержит ли словарь уже ключ, используя метод ContainsKey и обновляет значение с помощью indexer. См. Код ниже

    public void GetNumUpDownValue(object sender, EventArgs e)
    {
        int iname = int.Parse(((NumericUpDown)sender).Name);
        int ivalue = (int)((NumericUpDown)sender).Value;

       // Check if the dictionary already contains the value, if so, update it
       if(waytosave.ContainsKey(iname))
           waytosave[iname] = ivalue;
       else  // otherwise add the key and value
           waytosave.Add(iname, ivalue);

       txtOutputs.Text += "\r\r\n" + "   Node # " + iname + " = " + waytosave[iname].ToString();
    }
  • 0
    спасибо, это просто отлично работает.
0

Вы можете сделать что-то вроде этого:

if(waytosave.ContainsKey(iname))
   waytosave[iname]=ivalue;
else
   waytosave.Add(iname, ivalue);
0

метод Add генерирует исключение, если ключ уже существует, поэтому вам нужно использовать indexer:

waytosave[iname] = ivalue;

Это изменит прежнее значение, если оно уже существует, и добавьте новый, если это не так.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню