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

Développement Windows Discussion :

Probleme de List pour le moins etrange


Sujet :

Développement Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    etudiant / developpeur
    Inscrit en
    Décembre 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : etudiant / developpeur

    Informations forums :
    Inscription : Décembre 2009
    Messages : 131
    Par défaut Probleme de List pour le moins etrange
    Bonjour a tous, je fais face a un problème qui me dépasse.

    J'ai une class Item304 qui comporte pas mal de variable et notamment specValue1, specValue2 qui sont des float. (c'est mon objet que je stock dans mes list)
    j'ai une autre class qui crée tous mes différent item304 et les stock dans un dictionnaire .( cette class me permet de récupérer un item304 avec ces valeur vierge)

    viens ensuite mon problème , je reçois mes infos de la database qui me donne l'id de mon item et les specValue1 et 2 (les specValue ne sont pas les meme d'un enregistrement a l'autre),
    grâce a cette id je récupère une copie vierge de mon item304 et lui assigne les specValue1 et 2 puis ajoute cette item304 dans une list.
    (avant l'ajout de mon item dans cette list je verifie les valeurs , dans mon example j'ai 3 item304 qui on l'id 10 mais on pour valeur specValue 1 et 2 = 45f-0f / 65f-0f / 85f-1f )

    donc en toute logique ma list doit comporter 3 item304 d'id 10 et de specValue différente , or a la fin de ma fonction je retour cette list pour la traiter dans une autre class mais lorsque dans cette nouvelle class et fonction je recoi ma list , elle comporte 3 item304 avec pour id: 10 mais les 3 item on les meme specValu 1 et 2 qui on pour valeur 85f-1f qui est le dernier item envoyer dans la list

    voici ma fonction qui recupere les info de la db pour construire mes item304 et les ajouter dans une list :
    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
     Util.log("construct list 22");
                        string[] split = data2.Split('$');
                        foreach (string s in split)
                        {
                            Util.log("construct list 23");
                            string[] splitValueIt = s.Split('*');
                            int idItem = int.Parse(splitValueIt[0]);
                            int q = int.Parse(splitValueIt[1]);
                            float spec1 = float.Parse(splitValueIt[2]);
                            float spec2 = float.Parse(splitValueIt[3]);
                            int spec3 = int.Parse(splitValueIt[4]);
                            Item304 ii = dataB.getItem(idItem);
                            ii.quantity = q;
                            ii.SpecifiqueValue1 = spec1;
                            ii.SpecifiqueValue2 = spec2;
                            ii.specifiqueValue3 = spec3;
                            Util.log("Spec1 et 2 :" + ii.SpecifiqueValue1 + "--" + ii.SpecifiqueValue2);
                            listIt.Add(ii);
     
                        }
    j’espère avoir était le plus clair possible dans mes explications

    PS: je n'ai rien en static , aucune variable ni class ni fonction.

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Par défaut
    Bonjour,

    C'est le code derrière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Item304 ii = dataB.getItem(idItem);
    qu'il nous faut.
    A parier qu'il te retourne toujours le même élément pour un même id, d'ou ton problème.

    J@ck.

  3. #3
    Membre confirmé
    Homme Profil pro
    etudiant / developpeur
    Inscrit en
    Décembre 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : etudiant / developpeur

    Informations forums :
    Inscription : Décembre 2009
    Messages : 131
    Par défaut
    oui c'est exactement ça, j'ai résolu mon problème hier soir en créant un objet Item304 et en lui donnant toute les valeur de mon item vierge récupérer par datab.getitem() comme ca il ne le voit plus comme le même objet.

    mais ce que je ne comprend pas (car je code normalement en java et je n'avais jamais rencontré ca), c'est pourquoi apres l'avoir retourner dans ma fonction et changer quelque variable il le voit toujours comme le meme objet, je pensais qu'il en ferai une copie et qu'il n'y avais que en static qu'il garder le même objet.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Par défaut
    ben je ne vais pas me prononcer pour java (ça remonte à loin) mais pour le c#, et pour moi, c'est logique

    En faite ce qu'il faut voir c'est que le getItem ne te retourne justement pas une copie de l'object, mais en faite l'object lui-même par le biais de son adresse mémoire. donc chaque modif d'une de ses propriétés modifie l'object lui même.
    Je serais d'ailleurs surpris que Java ne fonctionne pas comme ca, car sinon je vois 2 problèmes, le premier c'est que toi développeur tu ne saura pas (sauf a tester) si une fonction te retourne l'object (toujours par son adresse) ou une copie de celui-ci. Et si on retournait toujours une copie, sans parler des problèmes que l'on aurait à faire ce que l'on veut, le temps de copie dépendrait de la taille de l'object en mémoire... du coup niveau perf on serait à la ramasse.

    J@ck.

  5. #5
    Membre confirmé
    Homme Profil pro
    etudiant / developpeur
    Inscrit en
    Décembre 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : etudiant / developpeur

    Informations forums :
    Inscription : Décembre 2009
    Messages : 131
    Par défaut
    Ok j'y vois plus clair , en fait c'est comme si la list nous retourner le pointer de l'objet demander.

    n'ayant jamais eu un tel problème en java je pensais que c’était gérer différemment mais peut-être pas au final .

    En tout merci pour ton aide tes explications qui m'ont éclairé.

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

Discussions similaires

  1. Probleme Twitter ID pour récupération liste
    Par lerorodu51 dans le forum ASP.NET MVC
    Réponses: 0
    Dernier message: 21/04/2011, 17h17
  2. Réponses: 13
    Dernier message: 13/11/2010, 13h01
  3. [AJAX] Liste déroulante pour afficher les informations en ajax div ?
    Par rob2-9 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 17/11/2006, 09h06
  4. Réponses: 2
    Dernier message: 01/06/2004, 16h12
  5. Réponses: 8
    Dernier message: 02/04/2004, 17h31

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