Я хочу обновить значения в моем словаре. Это когда я ввожу новое значение в тот же ключ. Ключ будет тем же, и значение просто изменится. Значения обновляются с числового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();
}
Проверьте, содержит ли словарь уже ключ, используя метод 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();
}
Вы можете сделать что-то вроде этого:
if(waytosave.ContainsKey(iname))
waytosave[iname]=ivalue;
else
waytosave.Add(iname, ivalue);
метод Add генерирует исключение, если ключ уже существует, поэтому вам нужно использовать indexer:
waytosave[iname] = ivalue;
Это изменит прежнее значение, если оно уже существует, и добавьте новый, если это не так.