IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Comment transformer un ArrayList en IList<Of T> ?


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut [C#] Comment transformer un ArrayList en IList<Of T> ?
    Bonjour,

    Je voudrais transformer une ArrayList en List générique (cela afin de pouvoir faire des tris).
    J'ai bien trouvé une méthode qui me transforme une List en ArrayList (via ArrayList.Adapter) mais pas l'inverse.

    En fait, je n'ai trouvé le moyen de faire des tris que via cette liste générique (pas moyen d'utiliser la méthode sort de l'objet ArrayList).

    Merci d'avance pour votre aide.
    Cordialement

    Stéphanie LOPERA
    Pensez à mettre quand vous avez obtenu la réponse à votre question.

  2. #2
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    Salut,
    sur ArrayList tu as une méthode Sort permettant de faire des tris ?

    tu peux passer à la méthode Sort une instance d'une classe héritant de IComparer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class MonComparer : IComparer  
     {
        int IComparer.Compare( Object x, Object y )  
        {
            int o_res = 0;
            // cette méthode renvoie 1 si x > y, -1 si x < y et 0 si x = y
            return o_res;
        }
    }
     
    ...
        ArrayList maListe = new ArrayList();
        // remplir maListe
        ...
        // trier
        MonComparer comp = new MonComparer();
        maListe.Sort(comp);
    Bien sûr pour comparer des objets il vaut mieux s'assurer qu'il sont du même type.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut
    C'est bien ce que j'avais fait dans un premier temps, mais ça plante à la compilation : il veut un objet de type IComparer dans le sort ... et si tu fais un cast, il dit à l'éxécution qu'il ne peut pas caster.

    Précision : je suis sous le framework 2.0 (en VS 2005)
    Pensez à mettre quand vous avez obtenu la réponse à votre question.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut
    Nooooooooooooon,

    Effectivement, cela fonctionnait bien dès le départ.
    Alors attention à tous ceux qui veulent faire cette méthode :
    ATTENTION AU NAMESPACE du IComparer

    (j'avais mis System.Collections.Generic au lieu de System.Collections !!)
    Pensez à mettre quand vous avez obtenu la réponse à votre question.

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    J'ai pas testé en framework 2.0.

    Le pb de cast c'est pas dans la méthode Compare ?

    Sinon donne le code de ta classe IComparer.

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par slopera
    [C#] Transformer un ArrayList en IList<Of T>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public List<MyType> FromArrayListToMyTypeGenericList(ArrayList arraylist, bool ignore)
    {
       List<MyType> genericL = new List<MyType>;
       for (int index = 0; index < arraylist.Count; index++)
       {
         if (!(arraylist(index) is MyType))
         {
           if (!(ignore))
           { throw new Exception("Tous les éléments du ArrayList doivent être du même type");}
         }
         else
         { genericL.Add((MyType) arraylist(index));}
       }
       genericL.TrimExcess();
       return genericL;
    }
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  7. #7
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    Citation Envoyé par slopera
    Nooooooooooooon,

    Effectivement, cela fonctionnait bien dès le départ.
    Alors attention à tous ceux qui veulent faire cette méthode :
    ATTENTION AU NAMESPACE du IComparer

    (j'avais mis System.Collections.Generic au lieu de System.Collections !!)
    ok je prend ca et le met dans mes dossiers p***** mais comment je pouvais le savoir 8)

    edité par neguib pour un ajuster un langage plus conforme

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par zeavan
    ok je prend ca et le met dans mes dossiers p***** mais comment je pouvais le savoir :lol: 8) :lol:
    Parce que le compilo le dit et que la version 'générique' des classes en question apparait avec des <> ? :)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  9. #9
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    maniak tu parles du cas ou le compilo ne sait plus de quelle classe l'objet appartient comme Datatable avec excel et system.data.

    donc je le sors de mon dossier mais voyons tres cher comment pouvais-tu le savoir

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par zeavan
    maniak tu parles du cas ou le compilo ne sait plus de quelle classe l'objet appartient comme Datatable avec excel et system.data.

    donc je le sors de mon dossier mais voyons tres cher comment pouvais-tu le savoir :wink:
    Je ne comprends pas la phrase surtout :)

    Tout ce que je sais, c'est que si tu passes un IComparer au lieu d'un IComparer<>, le compilo se plaint (j'en ai eu un paquet en passant à .NET2, le temps de me dire "bon ben on va faire simple, utiliser exclusivement System.Collections.Generics et plus jamais System.Collections tout court" :)

    (bon, sauf pour NHibernate qui ne connait que IList et qui me complique un peu la vie pour ça)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  11. #11
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    pas grave maniak autant pour moi ca arrive souvent que je sois le seul a me comprendre .

    sinon j'essaierai de me rappeler de
    System.Collections.Generics et plus jamais System.Collections tout court

  12. #12
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Maniak
    ...pour NHibernate qui ne connait que IList et qui me complique un peu la vie pour ça)
    Y-a-t-il une prevision de nouvelle version pour ajuster NHibernate avec la 2.0 ?
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par neguib
    Citation Envoyé par Maniak
    ...pour NHibernate qui ne connait que IList et qui me complique un peu la vie pour ça)
    Y-a-t-il une prevision de nouvelle version pour ajuster NHibernate avec la 2.0 ?
    Ben il est surtout prévu de s'attaquer au portage de Hibernate 3. L'utilisation des Generics passera peut-être dedans aussi :)

    Sinon il faut voir du côté des contribs Il y a peut-être déjà ce qu'il faut, mais j'ai pas encore pris le temps de fouiner là-dedans :)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Date] Comment transformer mon String en date avec newDate?
    Par Devil666 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/06/2005, 16h50
  2. Réponses: 2
    Dernier message: 01/05/2005, 20h37
  3. Réponses: 2
    Dernier message: 14/01/2005, 15h40
  4. XML/XSL vers HTML: comment transformer les linefeed en <B
    Par AlainM dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/11/2003, 12h30
  5. comment transformer un.jpg en .ico
    Par bacca en galère dans le forum Autres Logiciels
    Réponses: 9
    Dernier message: 30/10/2003, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo