Garder les reference de class ou de type int,string,... dans une collection ou d
nidk
Messages postés1Date d'inscriptionmardi 21 octobre 2003StatutMembreDernière intervention31 décembre 2008
-
31 déc. 2008 à 15:03
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDerniè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.
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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.
bubbathemaster
Messages postés339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 20094 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 :/
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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.