Trier une Classe Personnalisée List<T>
Je voudrais trier ma liste avec la date
propriété.
C'est ma classe personnalisée:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Test.Web
{
public class cTag
{
public int id { get; set; }
public int regnumber { get; set; }
public string date { get; set; }
}
}
Un c'est le List
que je veux trier:
List<cTag> Week = new List<cTag>();
Ce que je veux faire est de trier la Liste par la date
propriété de la cTag classe.
La date de l'ist dans le format: jj.MM.aaaa.
J'ai lu quelque chose à propos de la IComparable
interface, mais ne savent pas comment l'utiliser.
Vous devez vous connecter pour publier un commentaire.
Une façon de le faire est avec un
delegate
list.Sort((a,b) => a.date.CompareTo(b.date));
CompareTo
est mis en œuvre.IComparable
titulaires qui sont une classe auront la méthode, mais comment il le fait que la comparaison est jusqu'à la classe de créateur. Vous ne savez pas comment Date implémente ICompare, mais souvent j'ai vu des développeurs d'utiliser la commande paramètres ont été passés pour briser une égalité lorsque les valeurs sont égales. hthIl est exact que votre cTag classe doit implémenter
IComparable<T>
interface. Ensuite, vous pouvez simplement appelerSort()
sur votre liste.À mettre en œuvre
IComparable<T>
interface, vous devez mettre en œuvreCompareTo(T other)
méthode. La façon la plus simple pour ce faire est d'appeler la méthode CompareTo de la zone que vous souhaitez comparer, ce qui dans votre cas est de date.Cependant, ce ne serait pas de tri bien, parce que ce serait une utilisation classique de tri sur des chaînes de caractères (depuis que vous avez déclarée à la date sous forme de chaîne). Donc, je pense que la meilleure pensez à faire serait de redéfinir la classe et de déclarer la date n'est pas une chaîne, mais en DateTime. Le code devrait rester pratiquement le même:
Seule chose que vous avez à faire lors de la création de l'instance de la classe pour convertir votre chaîne de caractères contenant la date en type DateTime, mais il peut être fait facilement par exemple par
DateTime.Parse(String)
méthode.Pour ce cas vous pouvez également trier à l'aide de LINQ:
Tout d'abord, si la date de la propriété est de stocker une date, rangez-le à l'aide d'un DateTime. Si vous analysez le jour par le biais du tri, vous devez l'analyser pour chaque élément de la comparaison, qui n'est pas très efficace...
Vous pouvez ensuite faire un IComparer:
Vous pouvez même le faire en tant que délégué:
Vous avez raison, vous avez besoin pour mettre en œuvre IComparable. Pour ce faire, il suffit de déclarer votre classe:
Dans CompareTo, vous venez de mettre en œuvre votre algorithme de comparaison personnalisé (vous pouvez utiliser des objets DateTime pour ce faire, mais juste être certain de vérifier le type de "obj" en premier). Pour de plus amples informations, voir ici et ici.
IComparable<T>
serait probablement un meilleur choix, car il est vérifié pour les de préférence àIComparable
: msdn.microsoft.com/en-us/library/b0zbh7b6.aspxVous pouvez utiliser linq:
regarder surcharge de méthode de Tri de la Liste de classe. il existe des moyens pour elle.
l'un d'eux:
personnalisé de votre classe doit implémenter l'interface IComparable alors vous cam utiliser la méthode de Tri de la Liste de classe.
Merci à tous pour les Réponses rapides.
C'est ma solution:
Grâce
YourVariable.De tri((a, b) => un.montant.CompareTo(b.le montant));