Maison > développement back-end > C++ > Comment trier correctement une liste à l'aide d'un IComparer personnalisé avec Linq OrderBy ?

Comment trier correctement une liste à l'aide d'un IComparer personnalisé avec Linq OrderBy ?

Linda Hamilton
Libérer: 2025-01-01 04:11:10
original
327 Les gens l'ont consulté

How to Correctly Sort a List Using a Custom IComparer with Linq OrderBy?

Utilisation d'IComparer avec Linq OrderBy

Problème

Vous avez une liste générique où MyClass contient une propriété InvoiceNumber avec des valeurs telles que 200906/1. Vous souhaitez utiliser un IComparer pour trier la liste dans un ordre spécifique. Cependant, lorsque vous utilisez votre comparateur personnalisé, la liste est toujours mal triée.

Réponse

Il y a deux problèmes dans votre code :

  1. Le comparateur personnalisé que vous avez fourni ne trie pas correctement les nombres. Vous devez convertir les valeurs InvoiceNumber en nombres et trier en fonction de ces nombres.
  2. Vous ne mettez pas à jour la BindingList avec les éléments triés. Après avoir trié la liste, vous devez attribuer la liste triée à la propriété Items de BindingList.

Voici le comparateur personnalisé corrigé :

public class MyComparer : IComparer<Object>
{

    public int Compare(Object stringA, Object stringB)
    {
        string[] valueA = stringA.ToString().Split('/');
        string[] valueB = stringB.ToString().Split('/');

        if (valueA.Length != 2 || valueB.Length != 2)
        {
            return String.Compare(stringA.ToString(), stringB.ToString());
        }

        // Note: do error checking and consider i18n issues too :)
        if (valueA[0] == valueB[0]) {
          return int.Parse(valueA[1]).CompareTo(int.Parse(valueB[1]));
        } else {
          return int.Parse(valueA[0]).CompareTo(int.Parse(valueB[0]));
        }
    }

}
Copier après la connexion

Et ici est le code corrigé pour mettre à jour BindingList :

case ListSortDirection.Ascending:
    MyComparer comparer = new MyComparer();
    items = items.OrderByDescending(x => property.GetValue(x), comparer).ToList();
    break;
default:
    // Handle descending sort direction here
    break;
}

this.Items = items;
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal