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

ASP.NET Discussion :

[C#] Convertir un ArrayList en String[] ?


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 19
    Points
    19
    Par défaut [C#] Convertir un ArrayList en String[] ?
    Salut,

    j'ai cherché un peu partout, mais je n'ai pas trouvé comment faire ça de manière simple sans tout parcourir. Il doit bien y avoir quelque chose fourni par le framework non ?

  2. #2
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut
    Dans quel but veux-tu faire cela ?

    Parce que moi j'ai utilisé un ArrayList dans une fonction pour avoir tous les fichiers d'un dossier et de ses sous dossiers et il me suffisait de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (string file in myArrayList)
    Donc précises pourquoi tu veux transformer un ArrayList en string[]

    PS : Ca serait pas mieux dans Général Dotnet ça ?

  3. #3
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    bof çà reste un grand classique et effectivement la framework a déjà prévu la transformation d'un Arraylist en tableau de n'importe quel type du moment que cet Arraylist ne contient effectivement que ce seul type.
    Donc apparemment tu n'as pas bien cherché
    Méthode ArrayList.ToArray
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Type t = Type.GetType("System.String");
    string[] tableau = (string[]) MyArrayList.ToArray(t);
    comme je suis plutôt vbciste n'hésites pas à verifier mon C#

    PS: je suis d'accord avec DeusXL, tu aurais très bien pu poster ce souci dans le forum General DotNet puisque ce n'est pas spécifique au Web
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par neguib
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Type t = Type.GetType("System.String");
    string[] tableau = (string[]) MyArrayList.ToArray(t);
    comme je suis plutôt vbciste n'hésites pas à verifier mon C# :wink:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string[] tableau = myArrayList.ToArray() as string[];
    devrait suffire :)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Maniak
    Citation Envoyé par neguib
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Type t = Type.GetType("System.String");
    string[] tableau = (string[]) MyArrayList.ToArray(t);
    comme je suis plutôt vbciste n'hésites pas à verifier mon C#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string[] tableau = myArrayList.ToArray() as string[];
    devrait suffire
    Merci Maniak je ne le connaissais pas du tout en C#, inculte que je suis je ne l'utilisais qu'en Delphi.Net
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 19
    Points
    19
    Par défaut
    Oui, c'est vrai j'aurais pu poster dans Général dotnet, l'habitude de poster dans ce forum

    Sinon, merci pour les réponses, je teste demain, j'avais déjà trouvé cette solution sur le net, mais je n'ai pas essayé, car le "as" me paraissait être du VB.net

    Je ne connaissais pas bien le transtypage en C#... je vais tester tout ça...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 19
    Points
    19
    Par défaut
    Oui effectivement, ça marche, merci !

    cependant, j'ai un autre problème

    ma fonction retourne bien un String[]

    mais quand j'essaie d'affecter une variable du genre :

    String[] maVariable = maFonctionQuiRetourneUnString[];

    et qu'enuite j'essaie d'accéder aux éléments par un :

    maVariable[0], ça ne fonctionne pas

    une idée ?

  8. #8
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut
    Essaye de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach(string str in maVariable)
       Console.WriteLine(str);
    ( ou autre chose équivalent si t'es pas en mode console ).
    On sait jamais !

    Mais sinon le problème est sûrement dans ta fonction qui retourne un string[]... On pourrait en avoir le code ( si ce n'est pas trop long ) ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 19
    Points
    19
    Par défaut
    Bien sûr

    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
     
    		public static String[] LireElements (String pathFichier, String[] pathElements) {
     
    			String sessionId;
    			XmlTextReader lecteur;
    			MemoryStream fluxLecture;
    			byte[] buffer;
    			XmlDocument doc = new XmlDocument();
    			XmlElement racine;
    			XmlNode noeud;
    			ArrayList elementsTemp;
    			String[] elements;
     
    			// On se connecte a la base
    			sessionId = lectureBd.connect(bdLogin, bdPass);
     
    			// On lit le fichier de l'etudiant
    			buffer = Encoding.UTF8.GetBytes(lectureBd.getResource(sessionId, pathFichier , true, false));
     
    			// On se deconnecte de la base
    			lectureBd.disconnect(sessionId);
     
    			// On lit l'element
    			fluxLecture = new MemoryStream(buffer);
    			lecteur = new XmlTextReader(fluxLecture);
    			doc.Load(lecteur);
    			racine = doc.DocumentElement;
     
    			elementsTemp = new ArrayList();
     
    			for (int i = 0; i < pathElements.Length; i++) {
    				noeud = racine.SelectSingleNode(pathElements[i]);
    				elementsTemp.Add(noeud.InnerXml);
    			}
     
    			elements = new String[elementsTemp.Count];
    			elements = elementsTemp.ToArray() as String[];
     
    			return elements;
    		}

  10. #10
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Essayes
    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
     
    public static String[] LireElements (String pathFichier, String[] pathElements)
    {
       string sessionId;
       XmlTextReader lecteur;
       MemoryStream fluxLecture;
       byte[] buffer;
       XmlDocument doc = new XmlDocument();
       XmlElement racine;
       XmlNode noeud;
       ArrayList elementsTemp;
     
       // On se connecte a la base
       sessionId = lectureBd.connect(bdLogin, bdPass);
       // On lit le fichier de l'etudiant
       buffer = Encoding.UTF8.GetBytes(lectureBd.getResource(sessionId, pathFichier , true, false));
       // On se deconnecte de la base
       lectureBd.disconnect(sessionId);
       // On lit l'element
       fluxLecture = new MemoryStream(buffer);
       lecteur = new XmlTextReader(fluxLecture);
       doc.Load(lecteur);
       racine = doc.DocumentElement;
     
       elementsTemp = new ArrayList();
       for (int i = 0; i < pathElements.Length; i++)
       {
         noeud = racine.SelectSingleNode(pathElements[i]);
         elementsTemp.Add(noeud.InnerXml);
       }
     
       return (elementsTemp.ToArray() as String[]); 
    }
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 19
    Points
    19
    Par défaut
    ça marche pas, j'ai toujours une erreur : Object reference not set to an instance of an object.

    Je te mets le code que j'utilise pour appeler ma fonction :

    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
     
    	String[] pathElements = {"/etudiant/identite/nom",
    											"/etudiant/identite/prenom",
    											"/etudiant/identite/age",
    											"/etudiant/identite/nationalite",
    											"/etudiant/identite/sitFamille",
    											"/etudiant/identite/rue1",
    											"/etudiant/identite/rue2",
    											"/etudiant/identite/cp",
    											"/etudiant/identite/ville",
    											"/etudiant/identite/tel",
    											"/etudiant/identite/email"};
     
    			String[] elements = Global.LireElements(Global.GetCheminBd(Global.username), pathElements);
     
     
    			txtNom.Text = elements.Length.ToString();

  12. #12
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Remarque ceci serait pas mal aussi non :
    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
     
    public static String[] LireElements (string pathFichier, String[] pathElements)
    {
       XmlElement racine;
       string[] elements;
     
       racine = GetRoot(pathFichier);
       elements = new string[pathElements.Length-1];
     
       for (int i = 0; i < pathElements.Length; i++)
       {
         elements[i] = racine.SelectSingleNode(pathElements[i]).InnerXml;
       }
     
       return elements;
    } 
     
    private XMLElement GetRoot(string pathFichier)
    {
       byte[] buffer;
       string sessionId;
       MemoryStream fluxLecture;
       XmlDocument doc = new XmlDocument();
       XmlTextReader lecteur;
     
       // On se connecte a la base
       sessionId = lectureBd.connect(bdLogin, bdPass);
       // On lit le fichier de l'etudiant
       buffer = Encoding.UTF8.GetBytes(lectureBd.getResource(sessionId, pathFichier , true, false));
       // On se deconnecte de la base
       lectureBd.disconnect(sessionId);
       // On lit l'element
       fluxLecture = new MemoryStream(buffer);
       lecteur = new XmlTextReader(fluxLecture);
       doc.Load(lecteur);
     
       return doc.DocumentElement;
    }
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 19
    Points
    19
    Par défaut
    Oui merci beaucoup, tu as raison, ça marche

    j'avais oublié que je connaissais la taille du tableau

    de ton idée, j'ai repris le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    			elements = new String[pathElements.Length];
     
    			for (int i = 0; i < pathElements.Length; i++) {
    				noeud = racine.SelectSingleNode(pathElements[i]);
    				elements[i] = noeud.InnerXml;
    			}
     
    			return elements;
    Maintenant ça marche ! encore merci !

  14. #14
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    ok tant mieux
    sinon par rapport à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    elementsTemp.ToArray() as String[];
    qui est parti de la proposition de Maniak que j'ai cru sur parole, c'est peut être bien la cause du souci que tu as eu car perso j'utilisai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Type t = Type.GetType("System.String"); 
    string[] tableau = (string[]) MyArrayList.ToArray(t);
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

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

Discussions similaires

  1. Convertir un ArrayList<String> en un tableau d'entier
    Par nypahe dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 21/04/2009, 18h10
  2. Comment convertir un champs en string ?
    Par kalisto95 dans le forum ASP
    Réponses: 2
    Dernier message: 22/09/2005, 12h15
  3. Comment convertir un TChartTitle en string ?
    Par marsupilami34 dans le forum Langage
    Réponses: 4
    Dernier message: 25/07/2005, 14h14
  4. Réponses: 14
    Dernier message: 29/06/2005, 10h22
  5. [C#] Convertir des bytes en string
    Par sorcer1 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 03/02/2005, 15h52

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