Ich versuche, eine Liste von Objekten mit List.Sort(
zu sortieren, aber zur Laufzeit sagt es mir, dass es Elemente im Array nicht vergleichen kann.Warum kann ich IComparable <T> nicht für die Vorgängerklasse verwenden und untergeordnete Klassen vergleichen?
fehlgeschlagen
Klasse Struktur zwei Elemente im Array vergleichen:
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."
Warum kann ich nicht vergleichen Subklassen von einer Basis, die IComparable<T>
implementiert? Ich verpasse wahrscheinlich etwas, aber ich kann nicht sehen, warum das nicht erlaubt sein sollte.
Edit: Sollte klarstellen, dass ich .NET 3.5 (Sharepoint 2010)
EDIT2 bin Targeting: .NET 3.5 das Problem ist (siehe unten beantworten).
Da dies eine Laufzeitausnahme zu sein scheint, hat vielleicht einer Ihrer Kinder einen 'Title' von null? Oder vielleicht gibt es eine Null in Ihrer Liste? – nvoigt
http://stackoverflow.com/questions/1658661/failed-to-compare-two-elements-in-the-array –
Es funktioniert für mich mit .NET 4 aber [** nicht auf ideone **] (http: //ideone.com/rZ0rVL), welche .NET-Version verwenden Sie? –