[VB.net] Probléme sur les list de class

[Résolu/Fermé]
Signaler
Messages postés
58
Date d'inscription
samedi 15 décembre 2012
Statut
Membre
Dernière intervention
10 novembre 2015
-
Messages postés
16127
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 juillet 2021
-
Bonjour,
Je travaille sur un projet en VB.net et j'ai un petit soucis sur une liste de class. (Et que je dois avouer, commence à me prendre la tête).

Dans mon projet, je crée une nouvelle class de la forme:
class commande ( integer, Dictionary(Of String, Integer), single)

Public Class Commande

    Private _numtable As Integer

    Public Property NumTable() As Integer

        Get
            Return _numtable
        End Get
        Set(ByVal value As Integer)
            _numtable = value
        End Set
    End Property


    Private _element As New Dictionary(Of String, Integer)
    Public Property Elements() As Dictionary(Of String, Integer)
        Get
            Return _element
        End Get
        Set(ByVal value As Dictionary(Of String, Integer))
            _element = value
        End Set
    End Property

    Private _total As Single = 0
    Public Property Total() As Single
        Get
            Return _total
        End Get
        Set(ByVal value As Single)
            _total = value
        End Set
    End Property

End Class


Pour l'instant rien de bien compliquer.

Ensuite je crée une list de commande et je l'initialise lors de l'ouverture du formulaire.

Public Class serveur

    Private dic_plats As New Dictionary(Of String, Single)
    Private dic_boissons As New Dictionary(Of String, Single)
    Private dic_dessert As New Dictionary(Of String, Single)
    Private commandes As New List(Of Commande)


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        dic_plats.Add("salade de fugass", 15.5)
        dic_boissons.Add("melasse", 9)
        dic_dessert.Add("gateau de boue", 5)
        Dim i As Integer

        Dim commande_interne As New Commande

        For i = 0 To 4
        '' Dans cette boucle j'ajoute 5 élément dans ma liste afin qu'elle ne soit pas vide''

            commande_interne.NumTable = i + 1
            commande_interne.Total = 0
            commandes.Add(commande_interne)
            ''[/contents/1176-vbscript-les-boites-de-dialogue MsgBox]("numero de table " & Me.commandes.Item(i).NumTable) 
            '' le Msgbox ci dessus est pour vérifier si j'y ajoute les bonnes valeurs ce qui est le cas.
        Next


        For i = 0 To 4
            MsgBox("table " & commandes.Item(i).NumTable & Chr(13) & "i =" & i)
        Next
        '' Mon probléme est juste ici, mon Msgbox afin pour les 5 itérations table = 5, alors que précédemment j'avais bien 1, 2, 3, 4 puis 5. Pourquoi??????

        BT_table1.Checked = True

    End Sub



Voilà, tous ce compile sans problème, mais pas comme je le voudrais.
Mon problème vient de commandes.item(i).NumTable car dans la premier boucle for, j'ai bien les 5 tables ( 1 jusqu'à 5), alors que dans la deuxième je n'ai que la 5, et je ne sais pas pourquoi, si quelqu'un pouvais m'expliquer pourquoi je l'en remercie.

Cordialement.
Evilfalcon




1 réponse

Messages postés
16127
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 juillet 2021
724
Bonsoir, c'est normal,

dans ta liste tu ajoutes toujours la même instance de Commande.

Il faut en créer une nouvelle à chaque itération

        For i = 0 To 4
        '' Dans cette boucle j'ajoute 5 élément dans ma liste afin qu'elle ne soit pas vide''
            Dim lacomande As New Commande
            lacomande.NumTable = i + 1
            lacomande.Total = 0
            commandes.Add(lacomande)
        Next 



Réponse trouvée ->Question Résolue
Messages postés
58
Date d'inscription
samedi 15 décembre 2012
Statut
Membre
Dernière intervention
10 novembre 2015

ok! je pense comprendre, dit moi si je me trompe!!!
je crée une et une seul variable de type commande qui a une seul adresse, et à chaque itérations j'ajoute la même adresse dans la liste, donc les 5 éléments de ma liste ont les adresses, ils sont donc identiques.

Ça ma l'air logique, je teste:
Et ça marche, merci bien!
Messages postés
16127
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 juillet 2021
724
C'est ça.
Pense à passer ton sujet résolu.