2016-07-19 11 views
0

Ich habe ein enum:Wie sortiere ich eine Liste von Enums nach den Enum-Indizes in C#?

public enum Group 
{ 
    Administration = 1, 
    Lawyers, 
    PropertyManagement 
    Bookkeeping, 
    Secretariat 
} 

Ich habe eine List von Group auch: List<Group>. Ich brauche einen einfachen Weg, um die Werte der Liste nach dem Enum-Index zu sortieren.

So zum Beispiel diese Liste:

{ Group.Bookkeeping, Group.Administration, Group.Secretariat, Group.Administration } 

Wird worden:

{ Group.Administration, Group.Administration, Group.Bookkeeping, Group.Secretariat } 

(Verwaltung ersten, Buchhaltung zweiten, letztes Sekretariat, wie in der Definition der Enumeration). Ich suche nach einem einfachen Weg (vielleicht mit linq), ohne manuell zu loopen oder so.

+0

Sie Vererbung verwenden könnte, anstatt 'Enum', die Ihnen Vorteile auf lange Sicht geben. –

+0

@Callum Ich sehe nicht, wie Vererbung hier relevant ist. – CodeCaster

+0

Ich schaue mehr auf die Tatsache, dass er enums verwendet, um ein bestimmtes Objekt zu beschreiben, das wiederum eine Domäne des wirklichen Lebens beschreibt. Wo, wie, könnten Sie einige schreckliche Code (wie wenn, schaltet), indem Sie Vererbung, um diese reale Domäne zu beschreiben. Also machen Sie einen Administrator zu einem tatsächlichen Objekt (weil Administratoren sich von Buchhaltern unterscheiden) @CodeCaster –

Antwort

4

Array.Sort() verwendet den zugrunde liegenden Typ standardmäßig um die Elemente zu vergleichen:

List<Group> groups = new List<Group>() 
{ 
    Group.Bookkeeping, Group.Administration, Group.Secretariat, Group.Administration 
}; 

groups.Sort(); 
+0

Du hast wirklich verstanden, was ich falsch verstanden habe. Vielen Dank. – Sipo

+0

@Sipo können Sie diese Antwort jetzt als akzeptiert markieren. – user3185569

0

eine ENUM grundsätzlich ein integraler Typ ist, und ihre Mitglieder nummeriert wird von standardmäßig 1 von 0 und Inkrementieren beginnt. Angenommen, Sie einen Startindex geliefert haben, nämlich Administration = 1, Ihre Enum nummeriert wie folgt:

Administration = 1 
Lawyers = 2 
PropertyManagement = 3 
Bookkeeping = 4 
Secretariat = 5 

So können Sie einfach Art mit der Standardsortierung für die Sammlung, wie in Sorting a List<int> erläutert.

0

können Sie Linqs verwenden OrderBy:

List<Group> orderedGroups = groups.OrderBy(g => g).ToList();