Laden...

Verständnissproblem ArrayList sortieren...

Erstellt von mipa_acc vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.095 Views
M
mipa_acc Themenstarter:in
318 Beiträge seit 2006
vor 17 Jahren
Verständnissproblem ArrayList sortieren...

Hallo,

ich habe eine ArrayList und möchte diese Sortieren. In der Liste stehen nur Zahlen. Die haben zwar Subitems dabei aber das sollte ja nichts machen. Ich will diese Zahlen einfach nur aufsteigend sortieren.

Ich poste mal meinen Code:


  for (int i = 0; i < 20; i++)
                {
                    //Outlook Aufgabe aus Outlook holen
                    Aufgabe OutlookAufgabe = OutlookProvider.GetAufgabe(AlleIds[i]);

                    progressBar.Value = ProgressbarStatus;
                    ProgressbarStatus++;

                    //TCDB Anforderung holen
                    Aufgabe TcdbAufgabe = TcdbProvider.GetAufgabe(AlleIds[i]);

                    ListViewItem itm = new ListViewItem(TcdbAufgabe.Id.ToString());
                    itm.Tag = TcdbAufgabe.Id;

                    itm.SubItems.Add(TcdbAufgabe.ToString());
                    itm.SubItems[1].Tag = TcdbAufgabe;


                    //ID in die IDCoumnHeader Spalte einfügen
                    itm.SubItems.Add(OutlookAufgabe.ToString());
                    itm.SubItems[2].Tag = OutlookAufgabe;

                    a.Add(itm);

                    a.Sort();

                }

Soblad der zweite Wert in die ArrayList kommt bekomme ich einen Fehler: Fehler beim Vergleichen von zwei Elementen im Array.

Aber warum nur !? Ich denke, dass a.Sort() eben das macht was ich will. Mit einem IComparer kann ich leider nicht umgehen.

Bitte um Hilfe.

Vielen Dank im Vorraus.

MFG

B
1.529 Beiträge seit 2006
vor 17 Jahren

IComparer musst du aber lernen.

Du speicherst ListViewItem in deiner ArrayList (im FW 2.0 lieber List<T> verwenden). Und für diese existiert kein Vergleichsoperator.
Das es beim ersten Wert nicht knallt, liegt daran, dass Sort die Anzahl der Elemente prüft (bei einem Element kann man sich das Sortieren halt sparen).
Desweiteren ist es absolut unnötig (und ressourcenfressend) die Liste bei jedem Schleifendurchlauf zu sortieren. Einmal danach reicht doch.

public class myLviIntTagComparer : IComparer
{
   public int Compare ( Object x, Object y )
   {
      ListViewItem lvi1 = x as ListViewItem;
      ListViewItem lvi2 = y as ListViewItem;
      return ((int)lvi1.Tag).CompareTo( (int)lvi2.Tag );
   }
)

a.Sort( new myLviIntTagComparer() );

EDIT: Codekorrektur