OK, więc mam scenariusz podobny do poniższego kodu, mam klasy nadrzędnej, która implementuje IComparable i klasy potomnej.Mam problem z IComparable i metoda sortowania kolekcji
class Parent : IComparable<Parent>
class Child : Parent
Child a = new Child();
Child b = new Child();
a.CompareTo(b);
Teraz powyższe prace w porządku, mogę porównać dwa dziecka sprzeciwia się nawzajem bez problemu
List<Child> l = new List<Child>();
l.Add(b);
l.Add(a);
l.Sort();
Powyższy zawiedzie choć InvalidOperationException. Czy ktoś może wyjaśnić, dlaczego ten rodzaj nie działa, gdy klasa potomna implementuje interfejs IComparable, a przynajmniej wydaje mi się, że tak.
Dobrze tu jest mój realizacja CompareTo dla mojego rzeczywistej klasy nadrzędnej
public int CompareTo(IDType other)
{
return this.Name.ToString().CompareTo(other.ToString());
}
próbka mówi „new List()”, który zgaduję to literówka ... co jest rzeczywisty typ rodzajowy na listę, którą tworzysz? –
O tak, przepraszam, to był literówka, miałem listę l = nowa lista (); Myślę, że to dość oczywiste, jaką generyczną listę typów tworzyłem. –
CalvinR
Czy możemy zobaczyć kod z twojej implementacji IComparable? –