Panowie, może to i banał, ale nie mogę sobie poradzić z tym sortowaniem. Nieco inny przykład, ale idea ta sama. Chcę sortowanie po wielu kryteriach. Czytałem:
http://support.microsoft.com/kb/320727
Mój kod:
//domyślne po imieniu rosnąco
int IComparable.CompareTo(object obj)
{
Osoba l = (Osoba)obj;
return String.Compare(this.imie, l.imie);
}
//imię malejąco
public static IComparer imieMalejaco()
{
return (IComparer)new SortujImieMalejaco();
}
//nazwisko rosnąco
public static IComparer nazwiskoRosnaco()
{
return (IComparer)new SortujNazwiskoRosnaco();
}
//nazwisko malejąco
public static IComparer nazwiskoMalejaco()
{
return (IComparer)new SortujNazwiskoMalejaco();
}
private class SortujImieRosnaco : IComparer
{
int IComparer.Compare(object a, object b)
{
Osoba o1 = (Osoba)a;
Osoba o2 = (Osoba)b;
return string.Compare(o1.Imie, o2.Imie);
}
}
private class SortujImieMalejaco : IComparer
{
int IComparer.Compare(object a, object b)
{
Osoba o1 = (Osoba)a;
Osoba o2 = (Osoba)b;
return string.Compare(o1.Imie, o2.Imie) * (-1);
}
}
private class SortujNazwiskoRosnaco : IComparer
{
int IComparer.Compare(object a, object b)
{
Osoba o1 = (Osoba)a;
Osoba o2 = (Osoba)b;
return string.Compare(o1.Nazwisko, o2.Nazwisko);
}
}
private class SortujNazwiskoMalejaco : IComparer
{
int IComparer.Compare(object a, object b)
{
Osoba o1 = (Osoba)a;
Osoba o2 = (Osoba)b;
return string.Compare(o1.Nazwisko, o2.Nazwisko) * (-1);
}
}
I kawałek kodu z innej klasy (gdzie istnieje lista Osób do posortowania)
public void Sortuj(metodySortowania metoda)
{
switch (metoda)
{
case metodySortowania.imieRosnaco :
listaOsob.Sort();
break;
case metodySortowania.imieMalejaco :
listaOsob.Sort(Osoba.imieMalejaco(););
break;
Oczywiście błąd na tym:
listaOsob.Sort(Osoba.imieMalejaco());
Nie zgadza się argument... chociaż Osoba.imieMalejaco() zwraca IComparer a taki argument powinien być przyjęty.