2010-03-19 3 views

Répondre

2

Si vous voulez dire par l'intermédiaire de TreeViewNodeSorter, alors il doit s'agir d'un IComparer (en bref, il s'agit de génériques antérieurs). Vous pouvez écrire quelque chose qui Cales, mais il est sans doute pas la peine ...

public static class ComparerWrapper 
{ // extension method, so you can call someComparer.AsBasicComparer() 
    public static IComparer AsBasicComparer<T>(this IComparer<T> comparer) 
    { 
     return comparer as IComparer 
      ?? new ComparerWrapper<T>(comparer); 
    } 
} 
sealed class ComparerWrapper<T> : IComparer 
{ 
    private readonly IComparer<T> inner; 
    public ComparerWrapper(IComparer<T> inner) 
    { 
     if (inner == null) throw new ArgumentNullException("inner"); 
     this.inner = inner; 
    } 
    int IComparer.Compare(object x, object y) 
    { 
     return inner.Compare((T)x, (T)y); 
    } 
} 
+0

Merci Marc. Est-il au moins possible d'avoir une méthode de tri personnalisée pour les trier. Je suppose que ce n'est pas possible en raison du contrôleur TreeView. –

+0

Par ce que je veux dire un tri personnalisé que je peux appeler qui ne va pas jeter les choses de l'objet à TreeNode. –

1

Une chose qui m'a trébuché était que IComparer vient de System.Collections alors que IComparer vient de System.Collections.Generic .

Je ne disposions que
using System.Collections.Generic;
et devenais une erreur de compilation:
Cannot implicitly convert type 'MyApp.NodeSorter' to 'System.Collections.IComparer'. An explicit conversion exists (are you missing a cast?)

La solution était d'ajouter
using System.Collections;

Questions connexes