2010-02-12 15 views
8

Tengo un diccionario cuyos elementos necesito iterar y realizar cambios. No puedo usar la instrucción foreach, ya que a veces arroja InvalidOperationException, diciendo que la colección no se puede modificar durante una presentación.El método Dictionary.ElementAt es visible en algunas clases, pero no en otras

Puedo usar un bucle for, junto con el método Dictionary.ElementAt, y lo utilicé con éxito en otras clases, pero en esta clase particular, no se puede encontrar el método ElementAt. ¿Algunas ideas?

+1

No hay ideas sobre ElementAt, pero ¿no podría simplemente copiar las claves e iterar sobre eso? –

+0

¿Podría mostrarnos un ejemplo mínimo donde Dictionary.ElementAt no se encuentra? –

Respuesta

18

ElementAt es un extension method definido en System.Linq.Enumerable.

Es necesario añadir una cláusula de usar para que sea visible:

using System.Linq; 

Tenga en cuenta que ElementAt en un diccionario TKey <, TValue > no tiene mucho sentido, sin embargo, como la implementación diccionario hace no garantiza que los elementos estén en un orden específico, ni que el orden no cambie si realiza cambios en el diccionario.

+0

Y asegúrese de que su ensamblado tenga como objetivo .NET 3.5 (o superior). –

+0

¿Puede proporcionar un ejemplo para demostrar que es peligroso confiar en el índice para acceder a un diccionario? (es decir, donde el índice cambia para una clave determinada). –

+0

Aparentemente, el diccionario no garantiza el orden. Puede obtener elementos en diferentes órdenes en diferentes iteraciones a través del diccionario. –

Cuestiones relacionadas