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

VB.NET Discussion :

ArrayList.Sort(IComparer) demande passage de parametre


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Points : 338
    Points
    338
    Par défaut ArrayList.Sort(IComparer) demande passage de parametre
    Bonjour,

    j'essay de convertir un code C# en VB.NET

    je posséde une classe personnelle "Eleve"
    un ArrayList contenant des objets de type "Eleve"

    j'ai crèè une nouvelle fonction nommè "Compare" implementant IComparer.compare qui prend en parametre 2 objets et renvoy un Integer.

    dans cette fonction je cast mes 2 objets en parametre en "Eleve" pour les comparer sur leurs noms

    jusque la tout compile

    ensuite lorsque je veut lancer le tri de mon tableau j'execute

    MyArrayList.Sort(Compare)


    a ce moment la il me dit qu'il faut fournir 2 parametre mais normalement c'est le Sort qui sen charge....

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Peux-tu poster ton code ainsi que l'exception ?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Si Compare est le nom de la classe qui implémente IComparer, il faut que tu crées une instance de cette classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyArrayList.Sort(New Compare())
    EDIT: pardon, j'ai mal lu... la méthode Sort prend en paramètre une instance de IComparer, et là tu lui passes une méthode. Il faut que tu passes en paramètre une instance de la classe où tu as défini la méthode Compare

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Points : 338
    Points
    338
    Par défaut Codes et Exceptions
    Voici le code de ma classe BTSIG

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Public Class BTSIG : Implements Collections.IComparer
     
      Public listClasse As New Collections.ArrayList()
     
      Private Sub tri()
           listClasse.Sort(Compare)
      End Sub
     
      Private Function Compare(ByVal X As Object, ByVal Y As Object) As Integer Implements Collections.IComparer.Compare
          Return CType(X, Eleve).getNom.CompareTo(CType(Y, Eleve).getNom)
      End Function
     
    End Class
    Et l'exception levée est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Argument non spécifié pour le paramètre 'X' de 'Private Function Compare(X As Object, Y As Object) As Integer
     
    Argument non spécifié pour le paramètre 'Y' de 'Private Function Compare(X As Object, Y As Object) As Integer
    Merci d'avance pour votre aide

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Tu dois passer à Sort une instance de ta classe BTSIG, qui implémente IComparer.
    Ton design est à mon avis mauvais. Tu dois isoler le comparer du tableau à trier.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Une solution plus propre : supprime de BTSIG les membres listClasse et tri (qui n'ont rien à faire là : un comparer n'est pas dépendant des données qu'il compare).
    Pour l'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    laListe.Compare(New BTSIG())

Discussions similaires

  1. DOS passage de parametre à un .bat
    Par malbaladejo dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 26/11/2014, 15h44
  2. [langage] Passage de parametre lors de l execution
    Par WetzlarMan dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2004, 13h28
  3. Probleme de passage de parametre a un TQuery
    Par gve21 dans le forum C++Builder
    Réponses: 7
    Dernier message: 15/01/2004, 15h49
  4. Passage de parametre calculé
    Par soazig dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 06/06/2003, 16h25
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

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