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 :

manipuler une variable arraylist dynamiquement


Sujet :

VB.NET

  1. #1
    Membre régulier Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 83
    Points
    83
    Par défaut manipuler une variable arraylist dynamiquement
    Bonjour,
    J'ai créé une classe contenant pleins de variables du type arraylist.
    Pour chacune, j'ai créé une procédure qui permet de rechercher une valeur à l'intérieur, à partir d'une chaine

    fournie en paramètre d'entrée.

    Par exemple, j'ai une vingtaines de tableaux avec pour chacun d'eux ceci :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
     
        Private arCapacites As New ArrayList
        Private intNbCapaciteInArray As Integer = 0
     
        Public Sub New()
            LoadCapacités()
        End Sub
     
        Private Sub AddCapacite(ByVal paramname As String, ByVal paramvalue As Object)
            Dim tParams As String() = {paramname, paramvalue}
            arCapacites.Add(tParams)
        End Sub
     
        Private Sub LoadCapacités()
           AddCapacite("54501245", "16 personnes")
           AddCapacite("98545416", "52 personnes")
           AddCapacite("12000454", "28 personne")
     
            ... etc ...
        End Sub
     
        Public Function GetCapaciteType(ByVal strCodeTourinFrance As String) As String
            Dim OutPut As String = ""
            Dim MaxItem As Integer = intNbCapaciteInArray - 1
            Try
                For i As Integer = 0 To MaxItem
                    If strCodeTourinFrance = arCapacites(i)(0) Then
                        OutPut = arCapacites(i)(1)
                        i = MaxItem + 1
                    End If
                Next
                If OutPut = "" And BoolActiverOutputNotFound = True Then
                    OutPut = "<span style='color:#FF0000;'>" & Trim(strCodeTourinFrance) & "<span>"
                End If
            Catch ex As Exception
                OutPut = "<span style='color:#FF0000;'>" & ex.ToString() & "<span>"
            End Try
            Return OutPut
        End Function
     
        Public Function GetReverseCapaciteType(ByVal strTexte As String) As String 
            Dim OutPut As String = ""
            Dim MaxItem As Integer = intNbCapaciteInArray - 1
            Try
                For i As Integer = 0 To MaxItem
                    If InStr(arCapacites(i)(1), strTexte) > 0 Then
                        OutPut = arCapacites(i)(0)
                        i = MaxItem + 1
                    End If
                Next
                If OutPut = "" And BoolActiverOutputNotFound = True Then
                    OutPut = "<span style='color:#FF0000;'>--<span>"
                End If
            Catch ex As Exception
                OutPut = "<span style='color:#FF0000;'>" & ex.ToString() & "<span>"
            End Try
            Return OutPut
        End Function
     
        Public Function WriteCapaciteType() As String
            Dim strContenu As String = ""
            Dim nbItems As Integer = intNbCapaciteInArray - 1
            Try
                For i As Integer = 0 To nbItems
                    strContenu = strContenu & "Ligne " & i & " => (" & arCapacites(i)(0) & ")(" & arCapacites(i)(1) & 
     
    ")<br>"
                Next
                If strContenu = "" Then
                    strContenu = "<span style='color:#FF0000;'>Vide.<span>"
                End If
            Catch ex As Exception
                strContenu = "<span style='color:#FF0000;'>" & ex.ToString() & "<span>"
            End Try
            Return strContenu
        End Function


    Pour gagner du temps et alléger mon code, est-il possible d'attraper dynamiquement le nom d'un de ces objets

    arraylist et de réécrire mes fonction de recherche en appelant le nom de la variable arraylist dynamiquement ?

    C'est à dire, j'aimerai faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Function Recherche(ByVal strTexte As String) As String
    	Dim arMyDynamicList As ArrayList = FindMaVariableByName(strTexte)
    	arMyDynamicList.Contains ......
    End Function

    Est-ce possible et comment faire ?

  2. #2
    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
    Oui, avec la réflexion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function FindMaVariableByName(Of T)(ByVal name As String) As T
        Dim prop As PropertyInfo = Me.GetType().GetProperty(name)
        If prop Is Nothing Then
            Throw New ArgumentException("La propriété demandée n'existe pas", "name")
        End If
        Return CType(prop.GetValue(Me, Nothing), T)
    End Function
    J'ai déclaré la méthode générique pour pouvoir l'utiliser avec autre chose que ArrayList. Pour l'utiliser tu fais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim arMyDynamicList As ArrayList = FindMaVariableByName(Of ArrayList)(strTexte)
    Soit dit en passant, c'est pas super propre ce que tu fais dans ton code...
    • déjà il vaut mieux utiliser des collections génériques (List(Of T) par exemple) au lieu des ArrayList, c'est plus performant, ça évite de devoir faire des cast et ça évite d'avoir des erreurs à l'exécution qui auraient pu être détectées dès la compilation
    • d'autre part, au lieu d'utiliser un tableau de chaines de caractères pour contenir tes données, tu ferais mieux de déclarer une classe Capacité avec des propriétés Code et Value (par exemple), ça rendrait le code beaucoup plus lisible. Une autre option serait d'utiliser un Dictionary(Of String, String) pour associer les codes aux valeurs

  3. #3
    Membre régulier Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 83
    Points
    83
    Par défaut
    Merci beaucoup pour ta réponse.
    J'essais de monter ça, c'est exactement ce que je veux faire !!
    Merci

    PS: oui pour le code, je ne me suis mis en autodidacte à .NET que depuis peu donc je suis encore en train de voir comment optimier tout ça ... Je ne connais pas encore tous les tenants et aboutissants lol

Discussions similaires

  1. [AJAX] générer une variable javascript dynamiquement
    Par luna007 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/12/2008, 10h56
  2. recupérer le contenu d'une variable nommée dynamiquement
    Par sebpern dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 17/11/2008, 08h39
  3. [Débutant] Déclaration d'une variable ArrayList
    Par nanath02 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 08/03/2007, 10h30
  4. Réponses: 5
    Dernier message: 19/11/2006, 11h39

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