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 ?
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 ?
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 :
Donc précises pourquoi tu veux transformer un ArrayList en string[]
Code : Sélectionner tout - Visualiser dans une fenêtre à part foreach (string file in myArrayList)
PS : Ca serait pas mieux dans Général Dotnet ça ?
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
comme je suis plutôt vbciste n'hésites pas à verifier mon C#
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);
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![]()
Envoyé par neguib
devrait suffire :)
Code : Sélectionner tout - Visualiser dans une fenêtre à part string[] tableau = myArrayList.ToArray() as string[];
Merci Maniak je ne le connaissais pas du tout en C#, inculte que je suis je ne l'utilisais qu'en Delphi.NetEnvoyé par Maniak
![]()
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...
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 ?
Essaye de faire ça :
( ou autre chose équivalent si t'es pas en mode console ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 foreach(string str in maVariable) Console.WriteLine(str);
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 ) ?
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; }
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[]); }
ç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();
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; }
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 :
Maintenant ça marche ! encore merci !
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;
ok tant mieux
sinon par rapport à
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 elementsTemp.ToArray() as String[];
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);
Partager