La introducción de genéricos (o generics) es especialmente útil en las listas. Crear un ArrayList para un tipo nativo, como un entero o byte, es especialmente costoso, debido al boxing/unboxing. Pero aquí hay algunos trucos interesantes que se pueden realizar gracias a los genérics y a los métodos anónimos.
Supongamos que tenemos una lista genérica de esta forma:
List <Libro> libros = new List <Libro> ();
libros.Add (new Libro ("La Caperucita Roja", 1000));
libros.Add (new Libro ("Pedrito y el Lobo", 1000));
libros.Add (new Libro ("Diccionario", 2500));
Ahora, necesitamos ordenarla... La forma tradiccional sería Array.Sort (). Pero sólo se pueden ordenar arreglos de objetos que implementan IComparable ¿Qué pasa si no?.. ¿y si quiero ordenarlas con mi propio criterio?. Bueno, podríamos utilizar Quicksort o Bubblesort (???!!). Implementarlos a mano en el siglo XXI sería un poco retrógrado. La clase List<T> nos permite ordenar pasando un delegado, ¿cómo?, así:
libros.Sort (delegate (Libro libro1, Libro libro2) {return libro1.Precio.CompareTo (libro2.Precio)); });
Al método Sort sólo le pasamos un delegado, en este caso es un método anónimo. Dentro de nuestro método anónimo, el cual recibe los dos elementos "Libro" que serán comparados, sólo necesitamos retornar un bool. Para no complicarnos la vida, lo idea es siempre retornar el resultado de un método CompareTo, como en este caso. Con esto, ya tenemos ordenada la lista por el precio de los libros. Si quisiéramos ordenar la lista, pero esta vez por el nombre, escribimos:
libros.Sort (delegate (Libro libro1, Libro libro2) { return libro1.Titulo.CompareTo (libro2.Titulo)); });
Ahora, podríamos construir métodos de orden mucho más complejos (a vuestra imaginación). Pero hay otra opción muy común: "¿Qué pasa si necesito buscar ciertos elementos de la lista?". Esto también es muy fácil y también usaremos un método anónimo de la siguiente forma:
List <Libro> librosCaros = libros.FindAll (delegate (Libro libro) { return libro.Precio > 20000); });
En la lista librosCaros habremos almacenado todos los libros cuyo precio sea superior a 20.000. Fácil y bonito.