Ich habe gerade diesen Ausschnitt von einer Website genommen und es erwies sich als genau die Lösung, die ich für mein spezielles Problem brauchte.
Ich habe keine Ahnung, was es ist (besonders die Delegierten und die Rückgabeteile) und die Quelle erklärt es nicht.
Hoffentlich kann SO mich erleuchten.
%Vor%MyList.Sort hat einen Parameter - die Funktion, die für den Vergleich von Elementen zuständig ist, sodass die Liste entsprechend sortiert werden kann.
Als Nächstes: delegate (x, y) definiert die Funktion selbst, die zwei Parameter vom Typ KeyValuePair [String, Int32] .
Der Inhalt in den Klammern {...} ist die eigentliche Vergleichslogik:
%Vor%vergleicht 2 ganzzahlige Werte gemäß dieser Definition .
Damit wird Ihre Liste basierend auf den Werten dieser Ganzzahlen in der Reihenfolge der Zugänge sortiert.
Mit C # 3.5 würde ich es so umschreiben:
%Vor%Denken Sie darüber nach. Angenommen, Sie hatten eine Methode, die so aussah:
%Vor%Dies erfordert grundsätzlich zwei Werte und vergleicht sie. Je nachdem, ob x kleiner als, gleich oder größer als y ist, wird -1, 0 oder 1 zurückgegeben.
Unter dem Deckblatt hat List.Sort jetzt den Quick Sort-Algorithmus verwendet. Alles, was Sie verstehen müssen, ist, dass es verschiedene Elemente in Ihrer Liste miteinander vergleicht. Woher weiß es, ob der Wert a größer als, kleiner oder gleich dem Wert b ist? Es nennt diese Methode, und basierend darauf, weiß es. Macht Sinn?
Die Idee ist also, dass Sie einen Mechanismus zum Vergleichen zweier Werte in Ihrer Liste bereitstellen, den der List.Sort für die Vergleiche verwendet, die er zum Sortieren benötigt.
Nur ein FYI,
Dies wird häufig verwendet, wenn Sie eine Liste benutzerdefinierter Klassen sortieren müssen.
Für z.B.
%Vor%Es ist implizit, aber vielleicht sollten Sie die Erklärung Ihrer "myList" erwähnt haben. lass mich es für dich schreiben.
%Vor%Nun heißt das, dass jedes Element in dieser Liste eine Instanz von KeyValuePair [string, int] ist.
Kommen Sie jetzt zu Ihrer Frage.
Eine der Überladungen der Sort-Methode akzeptiert einen "Vergleichs" -Delegaten, der zwei Elemente einer Auflistung übernimmt und eine ganze Zahl zurückgibt.
%Vor%Sie erstellen im Wesentlichen einen anonymen Delegaten, der zwei Elemente vergleicht (in Ihrem Fall sortieren Sie nach "Wert", Sie können sogar nach "Schlüssel" sortieren), indem Sie die CompareTo-Methode von IComparable (string und int diese Schnittstelle implementieren).
IComparable.CompareTo gibt eine Ganzzahl zurück (die von der Sort-Methode verwendet wird, um die Elemente in Ihrer Liste anzuordnen), wobei lhs kleiner als (-1), größer als (1) oder gleich (0) rhs ist.
Zu Ihrer Information: Wenn Sie an C # 3.0 arbeiten, brauchen Sie nicht einmal einen anonymen Delegierten. Sie können stattdessen den Lambda-Ausdruck verwenden (es ist eine Kurzform, um einen anonymen Delegaten zu definieren, more? )
zB:
%Vor%Ich hoffe, die Erklärung ist hilfreich.
Tags und Links c# list anonymous-methods