C# ArrayList sortieren

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Hallo zusammen,

ich versuche gerade verzweifelt, eine ArrayList mit einem
String, der aus zwei Objekten besteht, zu sortieren.

Mit folgendem Code setze ich die beiden Objekte in einem String zusammen:
Code:
    public override string ToString()
    {
        return x + "," + y;
    }

Die ArrayListe (AL) versuche ich dann mit 'AL.Sort' zu sortieren.
Dabei erhalte ich die folgende Fehlermeldung vom Compiler:
InvalidOperationException wurde nicht behandelt:
Fehler beim Vergleich von zwei Elementen im Array.

Kann mir einer einen Tipp geben, wie ich das Problem beheben kann?

VG, David
 
Bitte mal den ganzen Code
 
Ich kann Pille1002 nur beipflichten, aber vermutlich hast du vergessen, in deinem benutzerdefinierten Datentyp das Interface IComparable zu implementieren.
 
So, anbei mal den kompletten Code:

Code:
using System;
using System.Collections;

public class Zahl
{
    public int x;
    public int y;

    public Zahl(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    public override string ToString()
    {
        return x + "," + y;
    }
}


public class DieArrayListe
{

    public static void Main(string[] args)
    {
        ArrayList AL = new ArrayList();
        Random Rand = new Random();

        for (int i = 0; i < 10; i++)
        {
            Zahl z = new Zahl(Rand.Next(100), Rand.Next(100));
            AL.Add(z);
        }

        AL.Sort();
    }
}

Ja, ich denke, dass das Interface 'IComparable',
aber ich verstehe einfach nicht wo und vor
allem wie ist das implementieren muss.

Wäre für Ratschläge diesbezüglich sehr dankbar!

VG, David
 
Ändere deine Klassendefinition wie folgt um:

Code:
public class Zahl : IComparable<Zahl>
{
    // ... bisheriger Inhalt

    public int CompareTo(Zahl that)
    {
        if(/* this kommt vor that */)
            return -1;
        if(/* this und that sind unvergleichbar */)
            return 0;
        
        return 1;
    }
}

Die Kommentare musst du natürlich noch entsprechend ersetzen, wir können nicht wissen, welche Ordnung du bei deinem Datentyp im Sinn hast. Mathematisch sollte es sich aber um eine "strenge schwache Ordnung" handeln, damit die internen Algorithmen von .NET richtig funktionieren.
 
Zurück
Oben