2011-05-27 18 views
6

Así que tengo un Dictionary<string, bool> y todo lo que quiero hacer es iterar sobre él y establecer todos los valores en falso en el diccionario. Cual es la forma mas fácil de hacer eso?¿Cómo cambiar todos los valores en un diccionario <string, bool>?

yo probamos este:

foreach (string key in parameterDictionary.Keys) 
    parameterDictionary[key] = false; 

Sin embargo, me sale el error: "Colección se modificó, la operación de enumeración no puede ejecutar."

¿Hay una mejor manera de hacerlo?

Respuesta

16

Simplemente cambie la fuente de enumeración a algo que no sea el diccionario.

foreach (string key in parameterDictionary.Keys.ToList()) 
    parameterDictionary[key] = false; 

para .NET 2,0

foreach (string key in new List<TKey>(parameterDictionary.Keys)) 
    parameterDictionary[key] = false; 
+1

Gah, siempre es algo tan simple. Duh; debe ser tarde. ¡Gracias! Aceptaré en 12 minutos cuando pueda :) – Chev

+0

Desafortunadamente, esto no es seguro si las claves se agregan mediante un hilo de fondo. –

+2

+1 @David: estoy corregido. El error original no se debió al subprocesamiento, sino que se repitió durante la modificación, todo en un único hilo. Su solución corrige el problema correctamente en la situación del OP. –

Cuestiones relacionadas