2 Stimmen

Fehler bei der Kompilierung beim Versuch, ein Array in C# zu sortieren

Ich habe Hausaufgaben in C# gemacht, die das Sortieren eines Arrays erforderten. Ich konnte ein Array von Ganzzahlen sortieren, indem ich

Array.sort(a, delegate(int x, int y) { return y-x;});

verwendet habe. Wenn ich jedoch vom bestimmten Position und Länge aus sortieren möchte

Array.sort(a, 0, m, delegate(int x, int y) { return y-x;});

erhalte ich einen Kompilierungsfehler: "Kannanonyme Methode nicht in Typ 'System.Collections.Generic.IComparer' konvertieren, da es sich nicht um einen Delegate-Typ handelt". Ich habe das Problem gelöst, indem ich einfach

Array.sort(a, 0, m);

verwendet habe und den Rest rückwärts gemacht habe. Warum hat es mir einen Fehler gegeben und wie kann ich es ändern, damit es funktioniert?

Danke für die Hilfe

6voto

DaveShaw Punkte 50735

Die Methode, die das erste Beispiel aufruft, hat die Signatur:

Array.Sort(int[] array, Comparison comparison) 

Der Delegat, den Sie verwenden, ist für den Vergleich. Es gibt keine Überladung von Array.Sort, die einen Index, eine Länge und einen Vergleich hat.

Die Methode, die Sie aufrufen möchten, hat die folgende Signatur:

Array.Sort(int[] array, int index, int length, IComparer comparer) 

Beachten Sie IComparer, nicht Comparison

Wenn Sie eine benutzerdefinierte Sortierung benötigen, müssen Sie eine Klasse erstellen, die IComparer implementiert, da dies das ist, was der 4. Parameter erwartet.

Alternativ versuchen Sie die .OrderByDescending-Erweiterungsmethode, die verfügbar ist, wenn Sie using System.Linq; einfügen.

0voto

Joe Punkte 39875

Wenn Sie keinen benutzerdefinierten Vergleicher benötigen, geben Sie null als 4. Argument weiter.

Wenn Sie dies tun, benötigen Sie einen Parameter, der speziell von IComparer erbt - Sie können nicht einfach einen anonymen Delegaten verwenden.

http://msdn.microsoft.com/de-de/library/system.collections.icomparer.aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X