JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Usando foreach con un diccionario genérico

Lo habitual cuando tenemos una colección o un enumerable de cualquier tipo es recorrer sus elementos usando un bucle de tipo foreach.

Sin embargo, cuando usamos una colección genérica de tipo System.Collections.Generic.IDictionary, como por ejemplo Dictionary<TKey,TValue> o SortedList<TKey,TValue>, (que son super-útiles en muchos casos) nos encontraremos con dificultades.

Si intentamos hacer algo como esto:

Dictionary dict = new Dictionary();
dict.Add("Uno", 1);
dict.Add("Dos", 2);
dict.Add("Tres", 3);
	
foreach(int numero in dict)
{
	Console.WriteLine(numero);
}

Descubriremos que obtenemos un error como este otro:

Cannot convert type 'System.Collections.Generic.KeyValuePair<string,int>' to 'int'

En el ejemplo anterior definimos un diccionario genérico que va a llevar laves de tipo texto y que usaremos para almacenar números enteros.

El problema es que esta no es la forma correcta de iterar por colecciones genéricas que tengan pares de clave/valor.

La forma correcta de hacerlo es la siguiente:

foreach(KeyValuePair par in dict)
{
	Console.WriteLine("Clave: {0}", par.Key);
	Console.WriteLine("Valor: {0}", par.value);
}

De esta forma tendremos acceso para enumerar tanto la lista de claves como la de valores asociados a éstas.

El motivo es que el enumerador de los IDictionary devuelve tipos KeyValuePar particularizados para el tipo de diccionario que hayamos creado, por lo que para enumerarlo no nos queda más remedio que usar esta técnica.

¡Espero que te resulte útil!

Aprende .NET, Cursos on-line tutelados: 
·
Visual studio 2010 desde cero
· Preparación examen 70–536: Fundamentos de desarrollo con la plataforma .NET
· Fundamentos de la plataforma .NET 3.5 y Visual Studio 2005/2008

José Manuel Alarcón
Banner

Agregar comentario