.net - orderby - Error al comparar dos elementos en la matriz
ordenar array string c# (5)
Tengo una List<T>
donde T
es una clase que expone una propiedad de "Nombre de usuario". El nombre de usuario es de un tipo personalizado que encapsula una cadena. Implementé la interfaz IComparable<T>
en este tipo personalizado que simplemente devuelve
this.encapsulatedString.CompareTo(other.encapsulatedString)
ICollectionView
un ICollectionView
de la lista así:
AllUsers=CollectionViewSource.GetDefaultView(myList);
Agregué una Sortdescription:
AllUsers.SortDescriptions.Add(new SortDescription("Username",ListSortDirection.Ascending));
En esta línea el código lanza la excepción indicada en el título. Puedo ordenar la lista por otros medios sin problema. ¿De dónde viene la excepción?
Como dijiste, necesitas implementar el IComparable
no genérico. Puede usar la clase Comparador <T> si desea implementar esta interfaz de una manera genérica agradable :)
En mi caso, agregué un bloque try / catch dentro de la función Comparar y mostré el mensaje de excepción en la consola. Si hay una falla dentro de su función de comparación, obtendrá esta excepción secundaria ("Error al comparar dos elementos ...").
Mi problema fue específicamente con la indexación a la posición 3 de una cadena que se debió a otro error.
En mi caso, la propiedad que se ordenaba era un object
, y el error se estaba produciendo cuando algunos de los objetos eran int
s y otros eran string
s.
Pude haber implementado IComparable
, pero el uso de la clase estaba realmente más orientado a cadenas: pude cambiar el object
a string
y me aseguré de que todos los .ToString()
usaran números llamados .ToString()
, y todo estaba configurado desde allí.
Stupidstupidstupid: el tipo personalizado tiene que implementar IComparable
, así como IComparable<T>
Parece que SortDescription utiliza la versión antigua no genérica de CompareTo
Voy a tener un sueño muy necesario ...
Tu respuesta no es estrictamente correcta por lo que puedo decir. Mis objetos no implementan IComarable o IComparable en absoluto y todavía funcionan bien. Estoy creando un CollectionViewSource y agregando descripciones de ordenación como usted y no obtengo este error. Recibí el error porque la propiedad en la descripción de clasificación estaba en blanco. Una vez que arreglé esto todo funcionó bien sin la interfaz. Sospecho que tal vez tenía una propiedad incorrecta y que vuelve a utilizar IComparable si no puede acceder a la propiedad.