As we know we can't update dictionary collection element if we are iterating them using foreach loop. For example, we could iterate Dictionary using KeyValuePair in foreach loop but we can't modify them because as per MSDN: "If the iteration variable is a value type, it is effectively a read-only variable that cannot be modified.". So being the iteration variable 'KeyValuePair<TKey, TValue> as a struct type (value type) here, it can't be updated.
But what if we want to iterate the entire dictionary and at the same time also we have a need to modify the Dictionary Elements.Let's see how we can do this:
Dictionary<int, string> ProductCollection = new Dictionary<int, string>();
ProductCollection.Add(1, "AAAAAAAAAAAAAA");
ProductCollection.Add(4, "BBBBBBBBBBBBBB");
ProductCollection.Add(7, "CCCCCCCCCCCCCC");
//Iterating entire ProductCollection but we can't update Dictionary element in foreach loop
foreach (KeyValuePair<int, string> item in ProductCollection)
{
Console.WriteLine(item.Key + "\t" + item.Value);
}
//Grab all the Keys and put it in a list
List<int> ids = ProductCollection.Keys.ToList();
//Iterate all the Dictionary elements through their keys and modify the dictionary elements
foreach (int idKey in ids)
{
ProductCollection[idKey] += "ChangedBy"+idKey.ToString();
}
foreach (KeyValuePair<int, string> item in ProductCollection)
{
Console.WriteLine( item.Key + "\t"+ item.Value);
}