2009-03-03 5 views

Antwort

1

Sie müssen einen Vergleicher einrichten, der Sort() mitteilt, wie die Elemente angeordnet werden.

Check out List.Sort Method (IComparer) für ein Beispiel dafür, wie dies zu tun ...

27

die Sortiermethode und Lambda-Ausdrücke verwenden, es ist wirklich einfach.

Das obige Beispiel zeigt, wie nach der Name-Eigenschaft Ihres Objekttyps sortiert wird, vorausgesetzt, Name ist vom Typ string.

+4

Welche sprengen, wenn a.Name ist null ... –

+0

Sie könnten einfach string.Compare (a.Name, b.Name) verwenden, was wäre sicher? –

+0

Danke! Lerne jeden Tag etwas Neues ... Ich bearbeite die Antwort. –

8

Wenn Sie nur Sort() wollen, arbeiten dann müssen Sie IComparable oder IComparable<T> in der Klasse implementieren.

Wenn Sie nichts dagegen haben eine neue Liste erstellen, können Sie die OrderBy/ToList LINQ-Erweiterungsmethoden verwenden. Wenn Sie die vorhandene Liste mit einfacher Syntax sortieren möchten, können Sie ein paar Erweiterungsmethoden hinzufügen, so dass:

list.Sort(item => item.Name); 

Zum Beispiel:

public static void Sort<TSource, TValue>(
    this List<TSource> source, 
    Func<TSource, TValue> selector) 
{ 
    var comparer = Comparer<TValue>.Default; 
    source.Sort((x, y) => comparer.Compare(selector(x), selector(y))); 
} 
public static void SortDescending<TSource, TValue>(
    this List<TSource> source, 
    Func<TSource, TValue> selector) 
{ 
    var comparer = Comparer<TValue>.Default; 
    source.Sort((x, y) => comparer.Compare(selector(y), selector(x))); 
} 
+0

Haben Sie ein Beispiel für die Verwendung dieser Erweiterungsmethoden, habe ich versucht, für meine Frage http://stackoverflow.com/questions/31057258/sort-list-of-dictionary-using-icomparer-intre-t-orderby, aber couldn Implementiere nicht wie du es vorgeschlagen hast –

2
public class Person { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

List<Person> people = new List<Person>(); 

people.Sort(
    delegate(Person x, Person y) { 
     if (x == null) { 
      if (y == null) { return 0; } 
      return -1; 
     } 
     if (y == null) { return 0; } 
     return x.FirstName.CompareTo(y.FirstName); 
    } 
); 
Verwandte Themen