cs_adaemon
Messages postés8Date d'inscriptionmardi 20 mars 2007StatutMembreDernière intervention 7 juin 2007
-
31 mars 2007 à 18:39
cs_adaemon
Messages postés8Date d'inscriptionmardi 20 mars 2007StatutMembreDernière intervention 7 juin 2007
-
1 avril 2007 à 12:25
Bonjour,
je souhaiterais mettre des structures dans une arraylist, et pouvoir accéder aux éléments de la structure stockée à l'index i de mon arraylist. Le foreach me permet d'accéder à toutes les structures de l'arraylist, mais il me faudrait pouvoir accéder à une structure bien localisée.
Bout de code :
void test()
{
Arraylist test1 = new Arraylist();
test1.add(new mystruct());
//comment accéder aux élements de la structure en test1[0] ?
}
cs_adaemon
Messages postés8Date d'inscriptionmardi 20 mars 2007StatutMembreDernière intervention 7 juin 2007 31 mars 2007 à 20:05
merci, j'ai testé et effectivement ça fonctionne. Mais j'ai envie de dire : ouch
c'est lourd comme utilisation. Si j'ai bien compris, si tu veux modifier un champ de ta structure qui est dans l'arraylist, il faut la caster dans une structure externe à l'arraylist et ensuite recopier la structure externe dans la structure de l'arraylist ?
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 31 mars 2007 à 20:23
ArrayList est une classe destinée à être une collection de n'importe quoi, et à ce titre elle est typée Object, type commun à tous les types en .NET, qu'ils soient référence ou valeur.
Si tu veux une collection spécialisée, tu peux développer une classe de collection fortement typée, ou utiliser une des classes de collection Generics.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 31 mars 2007 à 21:01
"Si j'ai bien compris, si tu veux modifier un champ de ta structure qui est dans l'arraylist, il faut la caster dans une structure externe à l'arraylist et ensuite recopier la structure externe dans la structure de l'arraylist ?"
Oui ça c'est à cause de la copie par valeur.. avec une classe, il faudra toujours passer par un cast mais il sera inutile ensuite de recopier cette classe dans l'ArrayList.
cs_adaemon
Messages postés8Date d'inscriptionmardi 20 mars 2007StatutMembreDernière intervention 7 juin 2007 1 avril 2007 à 01:25
yo
effectivement ca marche bien les generics. Par contre j'ai dû utilisé une classe à la place d'une struct, ça me faisait une erreur à la compilation avec la struct. J'avais le code suivant :
List
<myStruct> test = newList<myStruct>();
test.Add(new myStruct());
test[0].myString="hello world";
avec
struct myStruct
{
string myString;
}
J'ai une erreur au niveau du test[0].... ça me dit
Impossible de modifier la valeur de retour de 'System.Collections.Generic.List<my_project.myStruct>.this[int]', car il ne s'agit pas d'une variable
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 1 avril 2007 à 02:54
Oui on vient juste d'en parler dans les messages précédent, c'est à cause de la copie par valeur. avec test[ 0 ] tu n'accèdes pas à ta structure mais à une copie de celle-ci. Et comme là tu ne la sauvegarde pas dans une variable intermédiaire le compilo considère que c'est pas une lvalue valide.
Le code suivant ne déclenche aucun avertissements du compilo mais le problème est le même, c-à-d que la variable contenue dans la liste n'a pas été modifiée.
List< MyStruct > list = new List< MyStruct >( );
list.Add( new MyStruct( ) );
MyStruct copie = list[ 0 ];
copie.MyString = "Hello";
cs_adaemon
Messages postés8Date d'inscriptionmardi 20 mars 2007StatutMembreDernière intervention 7 juin 2007 1 avril 2007 à 12:25
ok
je crois que je vais travailler avec les classes. Du coup, je ne vois plus trop l'intérêt des structures.
En tout cas, merci à tous et bon dimanche. Je viendrai surement embeter les forumeurs de csharp plus tard ^^.