8
votes

C # - Icomarer - Si DateTime est NULL, il faut alors trier le bas et non le haut

J'ai une liste de dates que je veux trier dans une commande ascendante. Cependant, le comparateur par défaut signifie que j'ai:

18/01/2011
23/01/2011
null
null


1 commentaires

Sont vos "dates" en réalité nullable / DateTime? ou sont-ils des chaînes?


3 Réponses :


5
votes
public class DateTimeComparer : IComparer<DateTime?>
{
    #region IComparer<DateTime?> Members

    public int Compare(DateTime? x, DateTime? y)
    {
        DateTime nx = x ?? DateTime.MaxValue;
        DateTime ny = y ?? DateTime.MaxValue;

        return nx.CompareTo(ny);
    }

    #endregion
}
No extra null checking is required.

2 commentaires

Joli. Pourquoi pas raccourcir à datetime nx = x ?? DateTime.MaxValue;


Pourrait faire, n'a jamais envisagé d'utiliser l'OP NULL? Types lol!



18
votes

Voici un comparateur générique qui devrait fonctionner à peu près tout type: xxx


0 commentaires

1
votes

Vous pouvez essayer ceci:

messages.Sort((x, y) => (x.CreatedOn ?? DateTime.MaxValue).CompareTo(y.CreatedOn ?? DateTime.MaxValue));


0 commentaires