Completamente de acuerdo, es verdad lo que decis, de esta forma se pierde la 
ventaja que significa poder validar codigo en compilacion. Lamentablemente mi 
escenario requiere que permita a los programadores hacer esto. Aunque no se si 
conviene escribir los 200 delegados.
Gracias por interesarse en mi pregunta y gracias por la colaboracion.

Javier Wamba


  ----- Original Message ----- 
  From: Martin Salias 
  To: [email protected] 
  Sent: Saturday, June 02, 2007 11:20 AM
  Subject: [puntonet] Pregunta sobre ordenamiento


  Hola, Javier.

  La pregunta es cómo es tu escenario. Usando delegados no tenés que cambiar 
nada en tu colección, pero claro, tenés que escribir un delegado nuevo con las 
condiciones que se te de la gana. Incluso, para el caso de múltiples 
condiciones como vos decís, podés pasar n delegados. 

  El método que vos ponés, escribiendo una string que hay que evaluar, que 
implica usar reflection, sólo deberías usarlo en caso de que los criterios 
estén en un archivo de configuración, porque no tiene ningún tipo de chequeo. 
Con delegados tenés la ventaja de que es todo tipado, y queda validado en 
tiempo de compilación. 

  Saludos,
      /ms



  On 6/2/07, MYMTEC S.A. - Javier Wamba <[EMAIL PROTECTED]> wrote: 

    Si pero eso igual no sirve, a ver si me explico mejor.
    Alguno vio como es la implementacion del sort en dataTable donde se puede 
poner sort="id ASC, nombre DESC"
    bueno eso mismo para listas; donde por cada objeto accedo a la propiedad id 
y de ser igual accedo a la propiedad nombre y mañana o pasado sin recompilar 
nada podria usar la misma funcion que ordena para pasarle 
sort="fechaDeNaciemiento ASC, id DESC" y si los objetos de la lista tienen esas 
propiedades debe funcionar.

    Originalmente mi pregunta fue si el codigo que mande estaba bien o ya 
existia algo que funcionaba asi, la implementacion de icomparable no sirve 
porque depende de que el programador programe (valga la redundancia) el 
criterio de ordenamiento y deberia tener 1 solo cuando yo puedo necesitar 
muchos criterios por objeto.

    Muchas gracias por interesarse en el tema

    Javier Wamba


      ----- Original Message ----- 
      From: Luis Eduardo Duarte 
      To: [email protected] 
      Sent: Friday, June 01, 2007 6:56 PM 
      Subject: [puntonet] Pregunta sobre ordenamiento


      usando delegados :

      entidades.Sort(delegate(Entidad x, Entidad y) { if (x.Id > y.Id) return 
1; if (x.Id < y.Id) return -1; return 0; })

      Hasta hoy no tenia muy claro el uso de IComparer<Entidad> y la de 
Comparison<Entidad> 

      Gracias Martín, Leonardo, Javier.

      cordial saludo, 

      Luis Eduardo.


      ----- Original Message ----
      From: Martin Salias <[EMAIL PROTECTED]>
      To: [email protected]
      Sent: Friday, June 1, 2007 12:59:07 PM
      Subject: [puntonet] Pregunta sobre ordenamiento

      Hola, Javier.

      No necesariamente. Podrías pasar el criterio en un delegate. Casualmente 
eso es lo que hace LINQ, pasando expresiones lambda (que son delegados anónimos 
más elegantes, nada más).

      Saludos,
      -- 
      Martín Salías
      www.Salias.com.ar
      Agile Alliance Member - Microsoft MVP 




      On 6/1/07, MYMTEC S.A. - Javier Wamba <[EMAIL PROTECTED]> wrote: 
        No se puede con la implementacion de IComparable porque tengo que 
definir el
        ordenamiento en cada objeto y me quitaria la flexibilidad de poder 
decir que
        campos y que precedencia quiero. Con IComparable debo decirle como se 
ordena 
        en el codigo del compareTo

        Espero que se entienda.

        Javier

        ----- Original Message -----
        From: "Carlos S. Villalba" <[EMAIL PROTECTED] >
        To: <[email protected]>
        Sent: Friday, June 01, 2007 12:56 PM
        Subject: [puntonet] Pregunta sobre ordenamiento


        Es verdad, justamente era lo que iba a recomendar. Me ahorraste usar 
mis 
        dedos!!!.

        ___________________________________________

        Sebastian Villalba
        Award Support S.R.L.
        [EMAIL PROTECTED]
        Tel/Fax: 4541-0503 y lineas rotativas 
        ___________________________________________

        -----Mensaje original-----
        De: [email protected] [mailto: [EMAIL PROTECTED] En nombre de 
Leonardo 
        Micheloni
        Enviado el: viernes, 01 de junio de 2007 12:54
        Para: [email protected] 
        Asunto: [puntonet] Pregunta sobre ordenamiento

        Estás usando .net 2? porque si es así yo usaría una lista genérica y 
        de un modo muy fácil haría un sort implementarndo IComparable con el
        criterio que quiera.

        On 6/1/07, Pata del Santo <[EMAIL PROTECTED]> wrote:
        >
        >
        > yo la lista de parámetros la pasaría como un array de string, para no
        > estar
        > agregando parámetros opcionales en orderList
        >
        >  ________________________________
        >  De: [email protected] [mailto: [EMAIL PROTECTED] En nombre de 
MYMTEC
        > S.A. - Javier Wamba
        > Enviado el: viernes, 01 de junio de 2007 16:08
        > Para: [email protected]
        > Asunto: [puntonet] Pregunta sobre ordenamiento
        >
        >
        >
        >
        >
        > Buen dia!
        >
        > Hoy tengo una pregunta con respecto a mi codigo.
        >
        > El problema que esto intenta resolver es ordenar una lista por 
propiedades 
        > de sus objetos por ejemplo podria tener un objeto:
        >
        > persona que tiene las propiedades fechaDeNacimiento y provincia( que 
es un
        > objeto que contiene la propiedad id) entonces podria escribir
        >
        > funciones.orderList(listaDePersonas,"fechaDeNaciemiento
        > DESC","provincia.id ASC")
        >
        > donde a partir del segundo parametro se define el criterio de 
        > ordenamiento.
        >
        > Queria saber si esta bien hecho o hay algo que ya lo hace y de forma
        > optimizada.
        >
        > Y si alguien se pregunta porque lo hice asi: Es una de las tantas de 
mi
        > jefe! 
        >
        > Saludos y gracias,
        >
        > Javier Wamba
        >
        >
        >
        > Imports System
        >
        > Public Class Funciones
        >
        > #Region "Ordenamiento"
        >
        > Private Shared mutexOrden As New Threading.Mutex
        >
        > Private Shared ordenamientos() As String
        >
        > Public Shared Sub orderList(ByVal list As List(Of base), ByVal 
ParamArray
        > orders() As String)
        >
        > mutexOrden.WaitOne ()
        >
        > Try
        >
        > ordenamientos = orders
        >
        > list.Sort(AddressOf order)
        >
        > mutexOrden.ReleaseMutex()
        >
        > Catch ex As Exception
        >
        > mutexOrden.ReleaseMutex ()
        >
        > End Try
        >
        > End Sub
        >
        > Private Shared Function devolverPropiedad(ByVal b1 As entidades.base,
        > ByVal
        > prop() As String, ByVal index As Integer) As Object
        >
        > Try
        >
        > If prop.Length - 1 = index Then
        >
        > Return b1.GetType.GetProperty(prop(index)).GetValue(b1, Nothing)
        >
        > Else
        >
        > Return devolverPropiedad(b1.GetType.GetProperty 
(prop(index)).GetValue(b1,
        > Nothing), prop, index + 1)
        >
        > End If
        >
        > Catch ex As Exception
        >
        > Throw ex
        >
        > End Try
        >
        > End Function
        >
        > Private Shared Function orderAuxiliar(ByVal b1 As entidades.base, 
ByVal b2
        > As entidades.base, ByVal index As Integer) As Integer
        >
        > Dim vec() As String
        >
        > Try
        >
        > vec = ordenamientos(index).Split(" ")
        >
        > If vec.Length = 2 Then
        >
        > Dim compar As Integer = devolverPropiedad(b1, vec(0).Split("."),
        > 0).compareto(devolverPropiedad(b2, vec(0).Split("."), 0))
        >
        > If compar = 0 Then 
        >
        > If ordenamientos.Length - 1 = index Then
        >
        > Return compar
        >
        > Else
        >
        > Return orderAuxiliar(b1, b2, index + 1)
        >
        > End If
        >
        > Else
        >
        > If vec(1).ToUpper = "DESC" Then 
        >
        > Return compar * (-1)
        >
        > Else
        >
        > Return compar
        >
        > End If
        >
        > End If
        >
        > ElseIf vec.Length = 1 Then
        >
        > Dim compar As Integer = devolverPropiedad(b1, vec(0).Split("."), 
        > 0).compareto(devolverPropiedad(b2, vec(0).Split("."), 0))
        >
        > If compar = 0 Then
        >
        > If ordenamientos.Length - 1 = index Then
        >
        > Return compar
        >
        > Else
        >
        > Return orderAuxiliar(b1, b2, index + 1)
        >
        > End If
        >
        > Else
        >
        > Return compar
        >
        > End If
        >
        > Else
        >
        > Throw New Exception("Demasiados espacios") 
        >
        > End If
        >
        > Catch ex As Exception
        >
        > Throw ex
        >
        > End Try
        >
        > End Function
        >
        > Private Shared Function order(ByVal b1 As entidades.base, ByVal b2 As 
        > entidades.base) As Integer
        >
        > Try
        >
        > Return orderAuxiliar(b1, b2, 0)
        >
        > Catch ex As Exception
        >
        > Throw ex
        >
        > End Try
        >
        > End Function
        >
        > #End Region
        >
        > End class
        >
        >
        >
        > Public Class base
        >
        > Friend Sub New()
        >
        > End Sub
        >
        > End Class













--------------------------------------------------------------------------
      Food fight? Enjoy some healthy debate
      in the Yahoo! Answers Food & Drink Q&A.



  -- 
  Martín Salías
  www.Salias.com.ar
  Agile Alliance Member - Microsoft MVP 

Responder a