2011-01-18 2 views
10

J'ai une classe PropertyDetails:comment trier Liste <T> en C#/.net

public class PropertyDetails 
{ 

    public int Sequence { get; set; } 

    public int Length { get; set; } 

    public string Type { get; set; } 
} 

Je crée une liste de PropertyDetails comme

List<PropertyDetails> propertyDetailsList=new List<PropertyDetails>(); 

Je veux trier cette liste par PropertyDetails.Sequence.

Les solutions Linq sont les bienvenues.

+0

Liste propertyDetailsList = new Liste (); – PramodChoudhari

Répondre

1

N'utilisez jamais de collections non génériques en C# lorsque vous pouvez utiliser des génériques à la place. Il y a beaucoup de raisons d'utiliser collections génériques seulement (sauf cas particuliers).

Voir cette question pour plus d'informations: When would you not use Generic Collections?

Vous pouvez donc utiliser List<PropertyDetails> (que je crois expose une méthode Sort()) ou SortedList<,>.

2
var sortedList = propertyDetailsList.OrderBy(pd => pd.Sequence); 
+2

En fait, ne pas trier la liste, mais créer un nouvel IEnumerable qui contient les éléments triés ... Je pense toujours que c'est la solution demandée. –

+0

Ce n'est pas une "liste triée". C'est un "IOrderableEnumerable ". Il a besoin d'un .ToList() pour faire un "sortedList" réel. –

+0

d'où l'utilisation de "var", sortedList est juste le nom de la variable – Tahbaza

25

Si vous voulez trier la liste existante en place, vous pouvez alors utiliser la méthode Sort:

List<PropertyDetails> propertyDetailsList = ... 
propertyDetailsList.Sort((x, y) => x.Sequence.CompareTo(y.Sequence)); 

Si vous voulez créer une nouvelle copie triée de la liste que vous pouvez utiliser méthode de LINQ OrderBy:

List<PropertyDetails> propertyDetailsList = ... 
var sorted = propertyDetailsList.OrderBy(x => x.Sequence).ToList(); 

(. Et si vous n'avez pas besoin des résultats concrets comme List<T> alors vous pouvez omettre l'appel ToList final)

5

LINQ vous pouvez utiliser quelque chose de similaire à:

list.OrderBy(x => x.Sequence).toList(); 

Mais je préfère utiliser un comparateur personnalisé.

Questions connexes