Próbuję posortować listę obiektów przy użyciu List.Sort(
), ale w środowisku wykonawczym mówi mi, że nie może porównywać elementów w tablicy.Dlaczego nie mogę używać klasy IComparable <T> w klasie przodków i porównywać klas potomnych?
Nie można porównać dwa elementy w tablicy
struktury klasowej:
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."
Dlaczego nie mogę porównać podklasy bazy, która implementuje IComparable<T>
? Prawdopodobnie czegoś brakuje, ale nie rozumiem, dlaczego nie powinno to być dozwolone.
Edycja: należy wyjaśnić, że jestem kierowanie .NET 3.5 (SharePoint 2010)
Edit2: .NET 3.5 jest problem (patrz odpowiedź poniżej).
Ponieważ wydaje się, że jest to wyjątek środowiska wykonawczego, być może jedno z Twoich dzieci ma "Tytuł" o wartości NULL? A może na twojej liście jest null? – nvoigt
http://stackoverflow.com/questions/1658661/failed-to-compare-two-elements-in-the-array –
Działa na mnie z .NET 4, ale [** nie na ideone **] (http: //ideone.com/rZ0rVL), jakiej wersji .NET używasz? –