2016-10-13 2 views
-1

Ich habe eine Arraylist:Sortierung der verschiedenen Typen in C# Liste

ArrayList myList = new ArrayList(); 

Es enthält mindestens zwei Klasseninstanz. Ich möchte es nach einem Feld sortieren, das in beiden enthalten ist. Bitte helfen Sie mir IComparer für die Array.Sort() Methode zu schreiben oder geben Sie mir bitte einen Tipp, um eine andere Struktur für diese Aufgabe zu erstellen (eine Liste mit zwei Klasseninstanzen).

Vielen Dank im Voraus!

+1

Ich würde empfehlen, dass Sie eine übergeordnete Schnittstelle für diese beiden hinzufügen, wenn Sie sie zusammen benötigen. Dann verwenden Sie 'List ' anstelle von 'ArrayList' können Sie einfach die' 'OrderBy'' von linq verwenden. –

Antwort

0

Etwas wie folgt aus:

public sealed class MyComparer: System.Collections.IComparer { 
    // We want just one Comparer instance 
    public static MyComparer Comparer { 
     get; 
    } = new MyComparer(); 

    private MyComparer() { 
    } 

    public int Compare(object x, object y) { 
     if (Object.ReferenceEquals(x, y)) 
     return 0; 
     else if (Object.ReferenceEquals(x, null)) 
     return -1; 
     else if (Object.ReferenceEquals(y, null)) 
     return 1; 

     // Providing that the fields of interest are of type int 
     int leftField = (x is FirstType) 
     ? ((FirstType) x).FieldOfInterest1 
     : ((SecondType) x).FieldOfInterest2; 

     int rightField = (y is FirstType) 
     ? ((FirstType) y).FieldOfInterest1 
     : ((SecondType) y).FieldOfInterest2; 

     return leftField.CompareTo(rightField); 
    } 
    } 

    ... 

    ArrayList myList = new ArrayList(); 

    ... 

    myList.Sort(MyComparer.Comparer); 

Aber denken Sie daran, ArrayList ist ein veraltet Klasse, versuchen Sie Ihr Design zumindest in List<Object> oder (eine bessere Wahl) List<SomeBaseClassOrInterface> ändern.

+0

myList.Sort (MyComparer.Comparer.Compare); – SergeyA

+0

Vielen Dank! – SergeyA