Sto provando a creare un grafico a torta da un dizionario. Prima di visualizzare il grafico a torta, voglio riordinare i dati. Sto rimuovendo qualsiasi porzione di torta che sarebbe inferiore al 5% della torta e inserendoli in una fetta di torta "Altro". Tuttavia ricevo un'eccezione Collection was modified; enumeration operation may not execute
in fase di runtime.Modifica dei valori del dizionario in un ciclo foreach
Capisco perché non è possibile aggiungere o rimuovere elementi da un dizionario durante l'iterazione su di essi. Tuttavia, non capisco perché non si possa semplicemente modificare un valore per una chiave esistente all'interno del ciclo foreach.
Eventuali suggerimenti per: risolvere il mio codice, sarebbero apprezzati.
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);
So che questo è vecchio, ma se si utilizza .NET 3.5 (o è 4.0?) È possibile utilizzare e abusare LINQ come segue: foreach (stringa chiave in colStates.Keys.ToList()) {...} – Machtyn
@Machtyn: Certo - ma la domanda riguardava specificamente .NET 2.0, altrimenti avrei certamente * usato * LINQ. –