Sto cercando di ordinare una lista di oggetti usando List.Sort(
), ma in fase di esecuzione mi dice che non può confrontare gli elementi nella matrice.Perché non posso utilizzare IComparable <T> nella classe di antenato e confrontare le classi figlio?
Impossibile confrontare due elementi dell'array
struttura di classe:
public abstract class Parent : IComparable<Parent> {
public string Title;
public Parent(string title){this.Title = title;}
public int CompareTo(Parent other){
return this.Title.CompareTo(other.Title);
}
}
public class Child : Parent {
public Child(string title):base(title){}
}
List<Child> children = GetChildren();
children.Sort(); //Fails with "Failed to compare two elements in the array."
Perché non è possibile confrontare sottoclassi di una base che implementa IComparable<T>
? Probabilmente mi manca qualcosa, ma non riesco a capire perché questo non dovrebbe essere permesso.
Edit: dovrebbe chiarire che ho scelto come target .NET 3.5 (SharePoint 2010)
Edit2: NET 3.5 è il problema (vedi risposta qui sotto).
Poiché questa sembra essere un'eccezione di runtime, forse uno dei tuoi figli ha un 'Titolo' di null? O forse c'è un nulla nella tua lista? – nvoigt
http://stackoverflow.com/questions/1658661/failed-to-compare-two-elements-in-the-array –
Funziona per me con .NET 4 ma [** non su ideone **] (http: //ideone.com/rZ0rVL), quale versione di .NET stai usando? –