CategoríaDesarrollo

Productividad gratuita con Developer Express

Microsoft y Developer Express han editado una versión limitada pero gratuita de dos herramientas muy interesantes de Developer Express. Solamente son para desarrolladores en C#, pero yo he usado las versiones de pago y desde luego creo que merecen la pena. Básicamente son una (CodeRush) para tareas comunes en el editor que facilitan la escritura de código a través de atajos y plantillas y, por otro lado, una herramienta de refactorización del código (Refactor!) bastante mejorada con respecto a la que ya ofrece Visual Studio.

Por si estáis interesados os dejo el enlace desde donde podéis descargarlas y con algo de información extra acerca de las características de cada una de ellas.

http://msdn.microsoft.com/en-us/vcsharp/dd218053.aspx

Add to FacebookAdd to DiggAdd to Del.icio.usAdd to StumbleuponAdd to RedditAdd to BlinklistAdd to TwitterAdd to TechnoratiAdd to Yahoo BuzzAdd to Newsvine

Ordenar listas ¿IComparable o delegados anónimos?

La manera más simple de ordenar una lista es utilizar el método Sort(), el cual utiliza el método CompareTo() de los elementos de la lista para ordenarla. En el caso de datos simples, no es necesario agregar ni una sola línea de código para que la ordenación funcione correctamente. En el caso de listas de objetos, la clase que define los elementos debe implementar la interfaz IComparable. Pongamos como ejemplo una clase como la siguiente:

public class ClaseComparable : IComparable {
    private int _orden;
    public int Orden {
        get { return _orden; }
        set { _orden = value; }
    }

    public ClaseComparable(int valorOrden) {
        _orden = value;
    }

    public int CompareTo(ClaseComparable otro) {
        return _orden.CompareTo(otro.Orden);
    }
}

Si creamos una lista con este tipo de objetos, la llamada al meétodo Sort() de la lista mantendrá la lista ordenada por el valor de la propiedad Orden de los objetos que forman la lista. Esta forma de ordenación es bastante potente ya que nos permite crear una forma de ordenar elementos tan compleja como sea necesaria.

En otras ocasiones, no tenemos acceso al código de la clase de los objetos que conforman la lista. En estos casos la primera opción es crear una clase específica para que realice la función de ordenación. Esta clase debe implementar la interfaz IComparer y podemos pasarla como argumento al método Sort() de la lista. Veamos un ejemplo sencillo:

public class Ordenacion : IComparer {
  public int Compare(MiClase objeto1, MiClase objeto2) {
    return objeto2.CompareTo(objeto1);
  }
}

Y la forma de usarlo:

List lista = new List();
// Agregar objetos a la lista
lista.Sort(new Ordenacion());

Si no queremos crear una clase para todo el proceso, podemos utilizar un delegado anónimo para crear la función de ordenación tal y como se muestra a continuación:

List lista = new List();
// Agregar elementos a la lista
// Ordenar la lista
lista.Sort(
    delegate(MiClase objeto1, MiClase objeto2) {
        return objeto1.Orden.CompareTo(objeto2.Orden);
    });

En el ejemplo, se ha supuesto que mi clase tiene una propiedad Orden que puede ser comparada mediante el método CompareTo().

A %d blogueros les gusta esto: