cs_Capa6T
Messages postés36Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention15 août 2012
-
10 avril 2009 à 11:45
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 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.
cs_Capa6T
Messages postés36Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention15 août 20123 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;
}
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 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 ).
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Capa6T
Messages postés36Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention15 août 20123 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.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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).