C# Arraylist comment modifier une variable ??? [Résolu]

Signaler
Messages postés
36
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
15 août 2012
-
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
-
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

Messages postés
36
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
15 août 2012
3
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;
}
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
42
"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())) ;
Messages postés
36
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
15 août 2012
3
Non finalement ma solution de transformer ma structure en classe ne fonctionne pas....
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
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 ).
Messages postés
36
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
15 août 2012
3
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.
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
42
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())) ;