Wie eigene Vergleichsfunktion für .sort() anlagen?



  • hallo, ich habe eine neue Klasse erstellt. Eine normale Liste davon möchte ich jetzt sortieren (mit .Sort). Da meine Klasse kein Standardtyp ist, brauch sort noch eine vergleichsfunktion als Argument. Immer mit hinschreiben zu aufwendig. Wie kann ich für meiene Klasse einen Standard festlegen? Override kann ich nur Equals und GetHashCode.



  • Ich hab jetzt keine Ahnung von C#, aber... ist das das was Du suchst?



  • Das hatte ich schon erfolglos probiert.

    Hatte jedoch "IComparable" nicht mit vererbt. Mit IComparable gehts.

    Danke!



  • Ist zwar schon 2 Monate her, aber vielleicht Sucht mal einer und findet das dann...

    Man kann der Sort Funktion auch ein Lamda in die Hand drücken. Das sollte man natürlich nur machen, wenn man diesen Sort nicht oft braucht und der Vergleich auch nicht komplex ist.

    Dazu gibts die Klasse Comparer und deren statische Methode Create()

    Ein Beispiel:

    class myObj{
        public int number { get; set; }
        public string  name { get; set; }
        public override string ToString() => $"{number}: {name}";
    }
    
    static void Main(string[] args){
        var list = new List<myObj> {  new myObj { number = 2, name = "Dieter" }
                                    , new myObj { number = 3, name = "Klaus"  }
                                    , new myObj { number = 1, name = "Inge"   }
                                    };
    
        list.Sort( Comparer<myObj>.Create( (left, right) => left.number - right.number ));
    
        list.ForEach( x => Console.WriteLine(x));
    }
    

Anmelden zum Antworten