Garder les reference de class ou de type int,string,... dans une collection ou d

nidk Messages postés 1 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 31 décembre 2008 - 31 déc. 2008 à 15:03
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 1 janv. 2009 à 17:37
Voici mon soucis:

  void Add (ref int o)
  {
      list.add (o);
  }

/*dans mon main*/
i= 10;

myclass.add(ref i);

i =20;

Mon soucis est que dans ma list i est toujours egal a 10. J'aimerais que ca soit la reference de celui-ci qui soit sauvegarder, pour que si j'affiche i plus tard il soit egal aussi a 20.

3 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
31 déc. 2008 à 15:21
Salut,

int est un type valeur, la liste ne peut pas stocker de "référence" (le paramètre ref n'est valable que pour l'appel de Add en lui même).
String est quand à lui un type référence immuable : toute opération sur une chaîne de caractères retourne une nouvelle instance de String, l'instance courante n'est pas modifiée.

Dans ton cas le plus simple est probablement d'encapsuler les valeurs et de stocker les références aux instances du type en question.

/*
coq
MVP Visual C#
CoqBlog
*/
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
1 janv. 2009 à 13:29
Encapsuler, tu veux dire créer une classe genre "MyInt" qui contient juste un int avec toute la crap qu'il faut pondre pour que ca se comporte comme un int? (operators | & ^ ++ -- == + - implicit cast en int ToString CompareTo...), ca en fait du bazarre juste pour avoir des entiers par adresse :/
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 janv. 2009 à 17:37
D'un autre côté j'ai rarement eu besoin d'utiliser des types valeur par adresse.
Et si c'est pour basculer en unsafe pour ce genre de cas qui semble ne pas être un détail d'implémentation interne mais carrément un modèle de programmation, autant  arrêter le managé et aller en natif, ça sera probablement plus simple.


Sinon je ne parlais bien évidemment pas de se débrouiller par que MyInt se comporte comme un int, c'est un peu trop de travail pour un intérêt limité : il vaut mieux accéder à la valeur en elle même pour faire les opérations, via la propriété qui va bien.


De plus j'imagine qu'au final l'objet en question ne contiendra pas qu'un int. Si c'est le cas j'ai un peu de mal à voir à quoi sert cette liste d'entiers qui doivent pouvoir changer.

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous