El uso de la interfaz IComparable

Con la llegada de las lista genéricas es muy común usarlas como colecciones de objectos. Hasta aquí no hay ningun problema, pero ¿qué pasa si queremos usar el método Sort de esta colección?. Para que todo funcione correctamente tan sólo tenemos que hacer que nuestros objetos implemente la interfaz IComparable. Supongamos un clase muy simple, con un campo id, y un campo fecha de creación. Al implementar IComparable, tan sólo debemos escribir el método CompareTo, que será usado por el método Sort de nuestra lista genérica. Nuestra clase quedaría así

 

public class Ordenable : IComparable<Ordenable>
{
    private int _id;
    private DateTime _creationDate;

    public int Id
    {
        get { return _id; }
        set { _id = value; }
    }

    public DateTime CreationDate
    {
        get { return _creationDate; }
        set { _creationDate = value; }
    }

    public Ordenable(int id, DateTime creationDate)
    {
        _id = id;
        _creationDate = creationDate;
    }

    #region Miembros de IComparable<Ordenable>
    
    // Ordena la clase de menor a mayor por el campo _creationDate.
    public int CompareTo(Ordenable other)
    {
        return CreationDate.CompareTo(other.CreationDate);
    }

    #endregion
}

 

Y para comprobar el funcionamiento de nuestro método podemos usar este código en nuestra página.

 

<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
<br />        
<asp:GridView ID="GridView2" runat="server">
</asp:GridView>

 

protected void Page_Load(object sender, EventArgs e)
{
    List<Ordenable> list1 = new List<Ordenable>();
    list1.Add(new Ordenable(1, DateTime.Now));
    list1.Add(new Ordenable(2, DateTime.Now.AddDays(-1)));
    list1.Add(new Ordenable(2, DateTime.Now.AddDays(-2)));
    list1.Add(new Ordenable(2, DateTime.Now.AddDays(-3)));
    list1.Add(new Ordenable(2, DateTime.Now.AddDays(-4)));
    GridView1.DataSource = list1;
    GridView1.DataBind();

    list1.Sort();
    GridView2.DataSource = list1;
    GridView2.DataBind();
}
 

Todo lo explicado aquí sirve también para tanto para aplicaciones windows como para aplicaciones webs.

Published jueves, 24 de julio de 2008 14:36 by Indigo
Filed under: , ,

Comments

No Comments

Leave a Comment

(required) 
(required) 
(optional)
(required) 
Powered by Community Server (Non-Commercial Edition), by Telligent Systems