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 :

Byref indésirable dans une boucle


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    Par défaut Byref indésirable dans une boucle
    Bonjour,

    je dois sélectionner (dans BDsortie) une série d'objet (piquage) appartenant à une liste connue (BDPiquage). A chaque fois que je sélectionne un objet (appartenant initialement à BDPiquage), je dois lui rajouter des propriétés.
    je suis donc obligé d'instancier un nouvel objet "Piquagei" que je peux ensuite ajouter à ma liste de sortie (BDsortie).

    Je suis confronté à deux problèmes.
    l'objet Piquagei est déterminé par son adresse et non par sa valeur, ce qui fait qu'à la fin, ma liste est composé du même objet.
    Comment faire en sorte d'avoir des élements différents?

    ma BDPiquage est "public" sur ma solution. Est ce qu'il y a un risque pour qu'elle soit modifiée lorsque j'écris ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Piquagei = BDPiquage.Item(j)
    Piquagei.caracteristiquePiquage = LCP.Item(i)

    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
    Dim BDsortie As New List(Of Piquage)
     
             For i = 0 To LCP.Count - 1
                reponsetemp = False
                For j = 0 To BDPiquage.Count - 1
                    If LCP.Item(i).Diametre = BDPiquage.Item(j).caracteristiquePiquage.Diametre Then
     
                        Dim Piquagei As New Piquage
     
                        Piquagei = BDPiquage.Item(j)
                        Piquagei.caracteristiquePiquage = LCP.Item(i)
                        BDsortie.Add(Piquagei)
     
                        Piquagei = Nothing
                        Exit For
                     End If
                Next
                reponse = reponse And reponsetemp
            Next
     
            sortie.Add(reponse)
            sortie.Add(BDsortie)
            Return sortie
    Merci par avance

    Pito18

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Par défaut
    Si ton objet est envoyé byref, il sera modifié.

    Le mieux pour toi est sans doute de doter ta classe "piquage" d'une propriété readonly "Copie" qui renvoi une nouvelle instance de ta classe après avoir fastidieusement copié tous les membres de l'instance cible ...

    Puis dans ta boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Piquagei As New Piquage = BDPiquage.Item(j).copie
    Si quelqu'un connait un moyen plus direct, je suis preneur.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    Par défaut
    Merci pour cette reponse

    comment puis je coder cette propriété readonly "copie"?
    (je suis sous vb 2010)

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Par défaut
    Dans ta classe Piquage, tu rajoute la propriété suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            Public ReadOnly Property Copie() As Piquage
                Get
                    ' Tu Crées une nouvelle instance de la classe Piquage
                    ' Tu Copies les valeurs dont tu as besoin
                    ' --> MaNouvelleInstance.Membre1 = Me.Membre1
                    ' --> MaNouvelleInstance.Membre2 = Me.Membre2
                    ' --> etc ...
                    ' --> Return MaNouvelleInstance
                End Get
            End Property

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 70
    Par défaut
    merci!
    c'est exactement ce que j'attendais...

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

Discussions similaires

  1. [langage] incrementation de variable dans une boucle
    Par mimilou dans le forum Langage
    Réponses: 15
    Dernier message: 16/04/2004, 13h23
  2. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19
  3. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 17h07
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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