Bonjour, j'utilise Icomparer pour faire un tri mais j'ai un soucis:
public class UserControllerComparer : IComparer
{
public int Compare(UserInfo x, UserInfo y)
{
....................
}
UserController objUserController = new UserController();
System.Collections.ArrayList cUser = objUserController.GetUsers(PortalId, false, false);
UserControllerComparer Comp = new UserControllerComparer();
cUser.Sort(Comp); // c'est ici monprobléme, il n'accepte pas cette ligne
GridView1.DataSource = cUser;
GridView1.DataBind();
Ton problème vient du fait qu'une ArrayList n'est pas typée, alors que ton comparateur l'est.
2 solutions :
soit tu utilises une List à la place de ton ArrayList, soit tu fait implémenter IComparer (sans type) par ton UserControllerComparer (qui peut toujours implémenter IComparer)
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Autant pour moi, pour le cast c'est comme tout cast, il suffit de faire:
ToReturn = ((UserInfo)y).UserID.CompareTo(((UserInfo)x).UserID);
Merci encore de votre aide.
J'ai choisi la 2ème solution que vous me proposez mais il me demande de caster. Donc ma quetion, comment caster object x, object y en UserInfo par exemple parce que j'ai un truc du style:
ToReturn = x.UserID.CompareTo(y.UserID);
C'est ce que je veux caster.
Merci.
la méthode que tu as employée : ((type)maVariable), qui génère une exception en cas d'erreur
et (maVariable as type) qui ne fonctionne que si "type" est nullable, et le résultat est null en cas d'erreur.
De mémoire, je crois que la deuxième méthode est un rien plus rapide que la première.
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -