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

cs_Capa6T 36 Messages postés vendredi 5 décembre 2003Date d'inscription 15 août 2012 Dernière intervention - 10 avril 2009 à 11:45 - Dernière réponse : krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_Capa6T 36 Messages postés vendredi 5 décembre 2003Date d'inscription 15 août 2012 Dernière intervention - 10 avril 2009 à 13:25
3
Merci
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;
}

Merci cs_Capa6T 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cs_Capa6T
Meilleure réponse
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 10 avril 2009 à 16:19
3
Merci
"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())) ;

Merci krimog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de krimog
cs_Capa6T 36 Messages postés vendredi 5 décembre 2003Date d'inscription 15 août 2012 Dernière intervention - 10 avril 2009 à 14:23
0
Merci
Non finalement ma solution de transformer ma structure en classe ne fonctionne pas....
Commenter la réponse de cs_Capa6T
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 10 avril 2009 à 15:43
0
Merci
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 ).
Commenter la réponse de Lutinore
cs_Capa6T 36 Messages postés vendredi 5 décembre 2003Date d'inscription 15 août 2012 Dernière intervention - 10 avril 2009 à 18:31
0
Merci
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.
Commenter la réponse de cs_Capa6T
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 10 avril 2009 à 20:27
0
Merci
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())) ;
Commenter la réponse de krimog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.