martes, 11 de septiembre de 2012

VB.NET ¿Como ordenar una lista genérica de objetos sin modificar la clase a la que pertenecen?


Para ello es necesario que la clase de los objetos a ordenar implementen la interfaz IComparable. Si no podemos o no deseamos modificar la clase de los objetos en cuestión y esta no implementa el interfaz IComparable, podremos usar el método Sort, al cual se le pasa como parámetro una función delegada con el método de comparación. En el método de comparación utilizaremos algún atributo de la clase original cuyo tipo implemente el método CompareTo.


En el ejemplo deseamos ordenar una lista genérica de objetos de la clase 'Persona', para ello utilizaremos el atributo 'dni' que es tipo integer.

Código en VB.NET:
Dim listaPersonas As List(Of ClasePersona)

----

listaPersonas.Sort(Function(persona1 As ClasePersona, persona2 As ClasePersona)
    
persona1.dni.CompareTo(persona2.dni))