Estoy intentando crear un gráfico circular de un diccionario. Antes de mostrar el gráfico circular, quiero ordenar los datos. Estoy eliminando los sectores de tarta que serían menos del 5% de la tarta y los coloco en un segmento de tarta "Otro". Sin embargo, recibo una excepción Collection was modified; enumeration operation may not execute
en tiempo de ejecución.Edición de valores de diccionario en un bucle foreach
Entiendo por qué no puede agregar o eliminar elementos de un diccionario mientras itera sobre ellos. Sin embargo, no entiendo por qué no puede simplemente cambiar un valor para una clave existente dentro del ciclo foreach.
Cualquier sugerencia re: arreglar mi código, sería apreciada.
Dictionary<string, int> colStates = new Dictionary<string,int>();
// ...
// Some code to populate colStates dictionary
// ...
int OtherCount = 0;
foreach(string key in colStates.Keys)
{
double Percent = colStates[key]/TotalCount;
if (Percent < 0.05)
{
OtherCount += colStates[key];
colStates[key] = 0;
}
}
colStates.Add("Other", OtherCount);
Sé que esto es antiguo, pero si usa .NET 3.5 (¿o es 4.0?) Puede usar y abusar LINQ de la siguiente manera: foreach (clave de cadena en colStates.Keys.ToList()) {...} – Machtyn
@Machtyn: Claro, pero la pregunta era específicamente sobre .NET 2.0, de lo contrario ciertamente * habría * usado LINQ. –