1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { person[] a = new person[3];
for (int i = 0; i < 3; i++) { a[i] = new person(); } a[0].Name = "Frank"; a[1].Name = "Stefan"; a[2].Name = "Klaus";
Console.WriteLine("Test Array Anlage manuell; Ausgabe sortiert"); Array.Sort(a);
foreach (person b in a) { Console.WriteLine(b.Name.ToString()); }
} }
class person: IComparable { public string Name; public person() {}
public int CompareTo(object obj) { person pers1 = obj as person; Console.WriteLine(this.Name.CompareTo(pers1.Name).ToString());
return this.Name.CompareTo(pers1.Name); } } } |
Ich habe eine Frage zu der "Compare To" Methode.
Durch den Aufruf Array.Sort(a) in der Program Klasse soll das Array sortiert werden. Ich verstehe das ganze so, dass die Array Klasse in ihrer Sort Methode nach der Methode "Compare To" sucht, in der eine Sortierregel "hinterlegt" ist.
Die Sortierung erfolgt nach einigen Anleitungen so, dass entweder -1, 0 oder 1 aus der Compare To Methode zurückgegeben wird, um anzugeben, ob der aktuelle Wert höher oder niedriger ist, als der übergebene Wert. In vielen Anleitungen zu dieser Methode enthalten auch die return Anweisungen die Werte -1, 0 oder 1.
In dem vorliegenden Beispiel steht allerdings eine return Anweisung, bei der mir nicht klar ist, was das genau passiert. Diese return Anweisung ist übrigens analog eines Beispiels aus der MSDN Library; und das Programm funktioniert auch so.
In der Return Anweisung wird doch die Compare To Methode wieder selbst aufgerufen, warum?
Um zu sehen, was hier zurückgegeben wird, habe ich die Console.Writeline Methode eingefügt. Es wird folg. in diesem Prog zurückgegeben:
-1
-1
1
-1
-1
Zum einen verstehe ich nicht, warum bzw. wie es hier zu diesen Zahlenwerten kommt; zum anderen würde mich interessieren, was hier genau in welcher Reihenfolge passiert, also warum hier 5 Werte zurückgegeben werden bei 3 Array Elementen.
Für Eure Hilfe schon vorab Vielen Dank.
Frank
Moderiert von
Kha: C#-Tags hinzugefügt