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

C# Discussion :

Remplir un array de façon générique


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 54
    Points
    54
    Par défaut Remplir un array de façon générique
    Bonjour à tous!

    J'ai peu d'expérience en C#.
    Je travaille sur un projet de désérialisation.

    Je récupère une liste de valeur contenu dans un XML que j'aimerais affecter à un tableau dont je ne connais pas la forme.

    J'affecte l'object tab à un tableau de forme inconnue mais correspondant aux valeurs de mon xml.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Object tab = myObject.GetType().GetField(unNode2.Attributes[1].InnerText).GetValue(myObject);
    Et je souhaiterais affecter à tab une à une les valeurs récupérées dans mon xml.

    J'espère que j'ai réussi à être à peu près clair.
    Je vous remercie beaucoup

  2. #2
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    balance chaque noeud dans une list (par exemple) d'object.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 54
    Points
    54
    Par défaut
    Merci pour ta réponse Zaan
    J'avais déjà voulu faire comme tu m'as dit avec un ArrayList mais le problème est que mon tableau final est de type Object. Il faudrait donc que je puisse affecter mon ArrayList ou Listof contenant mes valeurs à mon tableau de type Object

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    pkoi utilisé les arraylist ?
    Une liste generique ne serait pas mieux ?

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 54
    Points
    54
    Par défaut
    Oui, peut-être.
    Mais en fait, le vrai problème, c'est comment affecter les valeurs du xml à l'objet de type object...

    Par exemple:
    Pour raison de désérialisation, mon object tab est en fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public float[,,] a = { { { 1, 2, 3 } }, { { 4, 5, 6 } } };
    Et il faudrait que je puisse lui affecter la liste de valeur suivante:
    7, 8, 9, 10, 11, 12

    Mais je ne peux pas faire tab.Add() puisque tab est de type Object

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    oui et c'est pourquoi il va falloir te tourner vers la Reflexion...

    malheureusement la Reflexion est un concept assez hardu pour un débutant en C# (ou tout langage.NET).
    Grace à la reflexion plutot que manipuler des objets typés, tu va manipuler les types eux memes, et grace à ces types effectuer des opérations sur des objets.

    mais avant d'en venir aux gros mots...
    meme si ta méthode ne doit pas connaitre le type des éléments qu'elle manipule, est ce que ce qui l'appel connais le type manipulé ?

    je veux dire est t'il possible de préciser à ta méthode quel type de tableau elle va devoir manipuler, et de le savoir à la compilation... ceci te permettrais d'éviter les mots grossier comme Reflexion.

    exemple de méthode générique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public T[] DeserializeArray<T>(XmlNode noeud)
    {
      List<T> list = new list<T>();
     
      ... /// Deserialisation de n éléments de type T.. tu te débrouille
     
      return list.ToArray();
    }
     
    String[] st = DeserializeArray<String>(noeudChaines);
    Bien entendu, il s'agit là d'une modélisation assez simpliste, mais il se peut qu'elle suffise avant de sortir l'artillerie lourde.

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 54
    Points
    54
    Par défaut
    Outch! La réflexion... j'en ai déjà entendu un peu parler ^^

    Pour répondre à ta question: Oui, il est possible de préciser à ma méthode quel type de tableau elle va devoir manipuler, c'est une donnée que je stocke dans le xml.
    Mais même s'il est possible de créer une liste (List) des valeurs avec le bon type, je ne pourrais pas l'affecter à mon object tab (type Object).

    J'arrive bien à lister les valeurs de mon Object tab de cette façon mais j'aimerai lui en affecter d'autres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Object tab = myObject.GetType().GetField(unNode2.Attributes[1].InnerText).GetValue(myObject);
    IEnumerable tt = tab as IEnumerable;
    foreach (Object t in tt)
          Console.WriteLine(t.ToString());

  8. #8
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Salut, j'effectue ça dans mon soft, surement que ça pourra t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                using (XmlReader reader = new XmlTextReader(fileName))
                {
                    // Dé-sérialisation d'un fichier XML vers la "dataGridViewConfTravail"
                    // (BindingSource = cDiscretTravailBindingSource)
     
                    XmlSerializer xSer = new XmlSerializer(typeof(T[]));
     
                    IEnumerable<CDefDiscretSauvegarde> ilist2 = (IEnumerable<CDefDiscretSauvegarde>)xSer.Deserialize(reader);
    }
    iList2 contient maintenant toutes tes variables issues de ton XML

Discussions similaires

  1. [MySQL] Remplir un array à partir d'une table
    Par Dauphin dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/06/2007, 07h25
  2. [MySQL] Remplir un array() avec des données issues d'une bdd
    Par fichtre! dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/12/2006, 17h03
  3. [VB.NET] Comment remplir un Array
    Par Immobilis dans le forum ASP.NET
    Réponses: 6
    Dernier message: 10/11/2005, 23h49
  4. Réponses: 1
    Dernier message: 28/06/2005, 10h28
  5. Remplir un array
    Par PrinceMaster77 dans le forum ASP
    Réponses: 11
    Dernier message: 01/04/2005, 09h23

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