2009-11-01 13 views
29

Ho uno List<T> dove T è una classe che espone una proprietà "Nome utente". Il nome utente è di un tipo personalizzato che incapsula una stringa. Ho implementato l'interfaccia IComparable<T> su questo tipo personalizzato che restituisce semplicementeImpossibile confrontare due elementi nell'array

this.encapsulatedString.CompareTo(other.encapsulatedString) 

ho definito un ICollectionView della lista così:

AllUsers=CollectionViewSource.GetDefaultView(myList); 

ho aggiunto un Sortdescription:

AllUsers.SortDescriptions.Add(new SortDescription("Username",ListSortDirection.Ascending)); 

Su questa linea il codice lancia l'eccezione indicata nel titolo. Posso ordinare la lista con altri mezzi senza problemi. Da dove viene l'eccezione?

risposta

46

Stupidstupidstupid: Il tipo personalizzato deve implementare IComparable così come IComparable<T> Sembra che il SortDescription utilizza la vecchia versione non generica stile di CompareTo

ho intenzione di dormire un po 'tanto bisogno ...

+0

Sentiti libero di chiudere la domanda se lo desideri ... – Noldorin

+37

NO, non chiudere. Qualcun altro potrebbe incontrare lo stesso problema – erikkallen

+4

+1 Sì, come me ... grazie per tenerlo aperto. :-) –

0

Come hai detto, è necessario implementare lo IComparable non generico. Puoi utilizzare la classe di ComparatoreT > se vuoi implementare questa interfaccia in modo generico :)

4

la tua risposta non è strettamente corretta da quello che posso dire. I miei oggetti non implementano affatto IComarable o IComparable e funzionano comunque bene. Sto creando una CollectionViewSource e aggiungendo descrizioni di ordinamento proprio come te e non ricevendo questo errore. Stavo ottenendo l'errore perché la proprietà nella descrizione di ordinamento era vuota. Una volta risolto, tutto funzionava perfettamente senza l'interfaccia. Sospetto che tu abbia una proprietà errata e che ricada all'utilizzo di IComparable se non è in grado di accedere alla proprietà.

5

Nel mio caso, ho aggiunto un blocco try/catch nella funzione Compare e visualizzato il messaggio di eccezione sulla console. Se c'è un bug all'interno della funzione di confronto, si otterrà questa eccezione secondaria ("Impossibile confrontare due elementi ...").

Il mio problema era specificamente con l'indicizzazione alla posizione 3 di una stringa che era "" a causa di un altro bug.

+1

Anche per me questo è stato causato da un'eccezione all'interno della funzione Confronta. –

0

Nel mio caso, la proprietà da ordinare era object e l'errore si verificava quando alcuni degli oggetti erano int s e altri erano string s.

ho potuto ho implementato IComparable, ma l'utilizzo della classe era davvero più stringa orientata - sono stato in grado di cambiare object-string, e assicurarsi che tutti i setter utilizzando numeri chiamati .ToString(), ed e 'tutto scolpito da lì .