Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1660 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [Résolu] [C#] Lire dans une collection

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] [C#] Lire dans une collection

n°1127502
Worldofdad​a
Posté le 22-06-2005 à 15:33:44  profilanswer
 

Bonjour,
 
Désolé de vous déranger mais c'est vraiment pour une question bete et qui m'agace.
J'ai crée une collection d'objets que j'ai rempli avec la méthode Add de l'attribut List (this.List.Add(...)).
Je n'ai pas eu le choix d'utiliser ca ... imposé.
 
Mon problème est que je voudrais lire les éléments de ma collection afin de rechercher un élément particulier (en faisant une recherche sur un attribut).
Or je n'arrive pas a trouver ce que je cherche ni sur MSDN ni sur le net ... je commence meme a me demander si c'est possible.
 
Vous auriez une petite aide a m'apporter ?
 
Merci beaucoup,
Worldofdada


Message édité par Worldofdada le 23-06-2005 à 09:41:48
mood
Publicité
Posté le 22-06-2005 à 15:33:44  profilanswer
 

n°1127979
ToxicAveng​er
Posté le 22-06-2005 à 21:44:39  profilanswer
 

enumerator si c'est une hashtable, ou un foreach si c'est une arraylist (par exemple)...


Message édité par ToxicAvenger le 22-06-2005 à 21:44:52
n°1128035
Taz
bisounours-codeur
Posté le 22-06-2005 à 22:26:48  profilanswer
 

ToxicAvenger a écrit :

enumerator si c'est une hashtable, ou un foreach si c'est une arraylist (par exemple)...


t'as pas du tout comprendre toi ...
 
 

Code :
  1. class C
  2. {
  3.   public static void Main()
  4.     {
  5.       System.Collections.IDictionary map = new System.Collections.Hashtable();
  6.       map[ 3] = "foo";
  7.       map[ 7] = "bar";
  8.       map[42] = "baz";
  9.       map[69] = "xyzzyx";
  10.       foreach(System.Collections.DictionaryEntry e in map)
  11. {
  12.   System.Console.WriteLine("{0} -> {1}", e.Key, e.Value);
  13. }
  14.     }
  15. }

n°1128036
Taz
bisounours-codeur
Posté le 22-06-2005 à 22:27:07  profilanswer
 

bref, foreach systématiquement.

n°1128233
kausa
Posté le 23-06-2005 à 09:20:35  profilanswer
 

essaie this.List[i]

n°1128235
Taz
bisounours-codeur
Posté le 23-06-2005 à 09:22:24  profilanswer
 

...

n°1128239
Worldofdad​a
Posté le 23-06-2005 à 09:24:25  profilanswer
 

J'ai déjà essayé this.List[i] mais je ne peux accéder aux attributs de mon objet.
 
Le coup du IDictionary, j'avoue ne pas comprendre mais je vais essayer de trouver des liens qui en parlent ?
 
Ca m'étonne quand meme qu'il n'y ai pas de solutions plus simples ...  
Je suis prenneur d'autres conseils  ;)  
 
Merci  :)  

n°1128241
FlorentG
Unité de Masse
Posté le 23-06-2005 à 09:25:38  profilanswer
 

Quand tu récupère quelque chose dans une list (genre via List[i] ou autre chose), t'obtient un Object. A toi de le caster dans le type que tu veux, et ainsi accéder aux attributs/propriétés/méthodes définies pour ce type :)

n°1128248
Taz
bisounours-codeur
Posté le 23-06-2005 à 09:28:39  profilanswer
 

...

n°1128250
FlorentG
Unité de Masse
Posté le 23-06-2005 à 09:29:57  profilanswer
 

J'oubliais qu'avec ForEach, le cast y est déjà :o

mood
Publicité
Posté le 23-06-2005 à 09:29:57  profilanswer
 

n°1128290
Worldofdad​a
Posté le 23-06-2005 à 09:41:30  profilanswer
 

Merci beaucoup ... j'ai trouvé.
 
Alors le truc c'est que je faisais en fait des collections de collections (je rajoutais un élément de ma classe collec dans la collec).
J'ai donc crée une classe interne.
Et puis ensuite avec le cast ca a marché niquel.
 
Encore merci  ;)

n°1128294
Taz
bisounours-codeur
Posté le 23-06-2005 à 09:42:16  profilanswer
 

j'imagine même pas le massacre ... cast donc jusqu'à que ça marche plus.

n°1128298
FlorentG
Unité de Masse
Posté le 23-06-2005 à 09:44:13  profilanswer
 

Ouais, ça à l'air bien massacrant...

n°1128428
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-06-2005 à 11:01:21  profilanswer
 

Worldofdada a écrit :

Merci beaucoup ... j'ai trouvé.
 
Alors le truc c'est que je faisais en fait des collections de collections (je rajoutais un élément de ma classe collec dans la collec).
J'ai donc crée une classe interne.
Et puis ensuite avec le cast ca a marché niquel.
 
Encore merci  ;)


bordel, mais foreach enfin [:mlc]

n°1128430
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-06-2005 à 11:01:48  profilanswer
 

ToxicAvenger a écrit :

enumerator si c'est une hashtable, ou un foreach si c'est une arraylist (par exemple)...


:heink:

n°1128432
FlorentG
Unité de Masse
Posté le 23-06-2005 à 11:02:34  profilanswer
 

ToxicAvenger a écrit :

enumerator si c'est une hashtable, ou un foreach si c'est une arraylist (par exemple)...


ForEach repose sur un enumerator [:spamafote]

n°1128577
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-06-2005 à 12:57:09  profilanswer
 

vous mélangez tout !!  
- premièrement, y'a pas d'Enumerator en .NET, mais une interface IEnumerator
- pour que foreach puisse parcourir une collection, ladite collection doit implémenter l'interface IEnumerable, dont l'unique méthode, GetEnumerator() retourne un IEnumerator exposant des méthodes permettant de parcourir la collection.
 
HashTable implémentant IEnumerable, elle est donc "parcourable" par foreach.
donc pour répondre à la question initiale de Wordofdada, s'il veut parcourir sa collection avec foreach (certainement ce qu'il y a de plus simple), à lui d'implémenter IEnumerable, et donc de créer une classe IEnumerator rattachée à sa collection


---------------
J'ai un string dans l'array (Paris Hilton)
n°1128589
Taz
bisounours-codeur
Posté le 23-06-2005 à 13:12:32  profilanswer
 

yield pawa :)

n°1128591
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-06-2005 à 13:12:39  profilanswer
 

de plus, Taz, je vois vraiment pas ce que vient faire IDictionary dans ton code. HashTable implémentant IEnumerable, quel besoin as tu de passer par IDictionary ?

n°1128593
Taz
bisounours-codeur
Posté le 23-06-2005 à 13:14:41  profilanswer
 

bah je sais. Seulement autant écrire du code générique. IDictionary ou Hashtable, ça change rien du tout ... Hashtable implémente IDictionary :o
 
Et puis d'ailleurs ça aide à comprendre le nommage.

n°1128670
FlorentG
Unité de Masse
Posté le 23-06-2005 à 14:00:27  profilanswer
 

Harkonnen a écrit :

vous mélangez tout !!  
- premièrement, y'a pas d'Enumerator en .NET, mais une interface IEnumerator
- pour que foreach puisse parcourir une collection, ladite collection doit implémenter l'interface IEnumerable, dont l'unique méthode, GetEnumerator() retourne un IEnumerator exposant des méthodes permettant de parcourir la collection.


C'est ce que j'ai dit... Sauf que j'ai utilisé le terme générique "enumerator"... Tout comme j'utilise ma voiture, et non mon interface IVoiture [:johneh]  
 
Faut faire gaffe ici, dès que tu précises pas assez tu te fais reprendre direct :D

n°1128672
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-06-2005 à 14:02:04  profilanswer
 

FlorentG a écrit :

C'est ce que j'ai dit... Sauf que j'ai utilisé le terme générique "enumerator"... Tout comme j'utilise ma voiture, et non mon interface IVoiture [:johneh]


de toute façon, tu es trop jeune pour avoir le permis d'IConduire :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°1128679
FlorentG
Unité de Masse
Posté le 23-06-2005 à 14:06:11  profilanswer
 

Harkonnen a écrit :

de toute façon, tu es trop jeune pour avoir le permis d'IConduire :o


Tu veux dire le permis de conduire, qui implémente IPermis ?

n°1130524
sielfried
Posté le 25-06-2005 à 00:33:33  profilanswer
 

Harkonnen a écrit :

- pour que foreach puisse parcourir une collection, ladite collection doit implémenter l'interface IEnumerable, dont l'unique méthode, GetEnumerator() retourne un IEnumerator exposant des méthodes permettant de parcourir la collection.


 
En réalité il suffit que le type déclare une méthode GetEnumerator(), et que celle-ci renvoie un type déclarant une méthode MoveNext() et Current().  
 
Reste que je ne vois pas vraiment d'intérêt à faire comme ça. [:figti]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1130527
Taz
bisounours-codeur
Posté le 25-06-2005 à 00:41:48  profilanswer
 

Harkonnen > tu peux me dire ce qu'on a fait pour mériter ça ?

n°1130529
sielfried
Posté le 25-06-2005 à 00:52:00  profilanswer
 

Taz a écrit :

Harkonnen > tu peux me dire ce qu'on a fait pour mériter ça ?


 
Ben teste. [:spamafote]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1130533
Taz
bisounours-codeur
Posté le 25-06-2005 à 00:56:45  profilanswer
 

et tu te rends compte à quel point c'est un bug grave ?

n°1130534
sielfried
Posté le 25-06-2005 à 00:58:46  profilanswer
 

Taz a écrit :

et tu te rends compte à quel point c'est un bug grave ?


 
Ca vient de la MSDN (doc de foreach).
 
J'ai conscience que c'est moche et a priori très inutile, mais c'est possible et prévu par le langage.


Message édité par sielfried le 25-06-2005 à 01:00:17

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1130537
Taz
bisounours-codeur
Posté le 25-06-2005 à 01:04:59  profilanswer
 

C'EST DE LA MERDE. Si tu regardes bien C#, y a la moitié des gens qui ont travaillé dessus qui ont rien compris. Y a tout dans C# pour faire du versioning de méthode propre et clair. Et y a des cons pour faire n'importe quoi. Des cons, je vois pas d'autres termes. C'est un véritable tackle à la gorge parce que ça demande plus de travail d'implémentation en plus.
 

Code :
  1. public object GetEnumerator()
  2.     {
  3.       return null;
  4.     }
  5.   IEnumerator IEnumerable.GetEnumerator()
  6.     {
  7.       return new Enumerator(this.n);
  8.     }


 
avec ce genre de connerie de merde :o ça m'étonnerait pas que ça donne pas le même résultat en fonction du compilateur.


Message édité par Taz le 25-06-2005 à 01:11:31
n°1130539
Taz
bisounours-codeur
Posté le 25-06-2005 à 01:08:50  profilanswer
 

plus j'y pense plus je me dis que c'est un échec le boulot supplémentaire qu'il faut. C'est minable. Y a pas que ça de pourri en C# remarque. Et bien sur quand on est con c'est pour la vie, pas question de défaire ses bêtises d'assumer.
 
 
Vive python


Message édité par Taz le 25-06-2005 à 01:11:09
n°1130542
sielfried
Posté le 25-06-2005 à 01:12:29  profilanswer
 

On est d'accord que c'est de la merde...
 
C'était purement à titre indicatif.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1131991
Worldofdad​a
Posté le 27-06-2005 à 11:01:49  profilanswer
 

Bon finalement, j'ai tout viré pour passer avec les HashTables.
 
C'est beaucoup plus simple, et a mon avis beaucoup plus intelligent.
 
Merci   :)  

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [Résolu] [C#] Lire dans une collection

 

Sujets relatifs
[applet] utilisation JFileChooser [Résolu]vbs excel [ résolu ]
[resolu] erreur de traitement sur IE pcHELP, Menu déroulant dynamique avec PHP [RESOLU]
[XSL] "<xsl:include" avec un chemin absolue[resolu]Appliquer un style sur une seule colonne d'un tableau [résolu]
(applet) selecteur de fichier avec tomcat [Résolu][Résolu] id, comment ne pas le répéter.
pb applet avec tomcat !! [Résolu][Résolu]Script : extraction des appels de fonctions
Plus de sujets relatifs à : [Résolu] [C#] Lire dans une collection


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR