C# Arraylist comment modifier une variable ???

Résolu
cs_Capa6T Messages postés 36 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 août 2012 - 10 avril 2009 à 11:45
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 10 avril 2009 à 20:27
Bonjour,

J'ai une structure comme ceci
public struct AlarmeStruct

{
public string Slogan
;
public string FingerPrint
;
}
AlarmeStruct TempAlarm
= new AlarmeStruct ();

Une Arraylist qui va contenir mes données:

public ArrayList Alarmes
=new ArrayList();

.../.. Admettons que j'ai rempli mon tableau avec plein de données avec ce type de commande:Alarmes.Add(TempAlarm);

Comment ensuite modifier par exemple toutes les valeurs de la variable FingerPrint dans mon Arraylist ????

Le code suivant me donne une erreur compilo : Cannot modify members of 'o' because it is a 'foreach iteration variable' (CS1654)

foreach(AlarmeStruct o
in Alarmes
)
   o.FingerPrint="Test";

Par avance merci pour vos réponses parce que là je séche depuis quelques jours et je ne trouve pas ma solution.

6 réponses

cs_Capa6T Messages postés 36 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 août 2012 3
10 avril 2009 à 13:25
Ok bah visiblement j'ai trouvé, suffit de transformer ma structure en classe et le tour est joué....Me reste à tester si ça marche vraiment mais la compil se fait bien...

soit en final la modification du code suivante (en rouge):

public class AlarmeStruct

{
public string
Slogan;
public string
FingerPrint;
}
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
10 avril 2009 à 16:19
"Non finalement ma solution de transformer ma structure en classe ne fonctionne pas".

Bizarre, j'aurais justement dit que c'était de là que venais ton problème. En effet, les structures étant des types par valeur (contrairement aux classes) (du moins c'est ce qu'on m'a toujours appris), o est une copie de l'objet, donc le modifier reviendrait à modifier une copie, ce qui n'a aucun intérêt.

Cependant, c'est étonnant que ça ne fonctionne pas avec une classe.

Krimog :
while (!(succeed = try())) ;
3
cs_Capa6T Messages postés 36 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 août 2012 3
10 avril 2009 à 14:23
Non finalement ma solution de transformer ma structure en classe ne fonctionne pas....
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
10 avril 2009 à 15:43
Salut, le compilateur te le dit clairement, c'est la boucle "foreach" le problème, utilise une boucle "for". ( avec un type "classe" sinon avec un type estructe tu vas t'exposer à un autre problème ).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Capa6T Messages postés 36 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 août 2012 3
10 avril 2009 à 18:31
Oui je viens de comprendre, vous avez raison il faut transformer ma structure en classe.
J'ai un peu caffouillé dans mes tests alors je pensais que ce n'était pas bon mais en final ça marche.
Pas si facile la transition du c vers le c#... faut bien comprendre le mécanisme des objets et j'avance à petit pas...
Merci pour vos réponses.
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
10 avril 2009 à 20:27
Pour simplifier (tu le sais probablement déjà, mais au cas où...), grosso-modo, un type par valeur (types primitifs + structs), c'est comme les variables en C, tandis que les types par référence (classes), c'est comme les pointeurs, et ça implique par exemple un new pour être créé (la simple déclaration ne suffit pas) (un peu de la même manière que tu fais un malloc() en c).

Krimog :
while (!(succeed = try())) ;
0
Rejoignez-nous