Ce que vous voulez, c'est un pointeur vers une variable. Il est difficile d'expliquer la différence entre un "type de valeur" (comme int
o struct
), une référence et un pointeur. Je ne peux que recommander d'apprendre le C.
Voici une solution qui fonctionne, bien qu'elle puisse nécessiter de nombreux changements dans votre code.
//a class that will hold an int inside
public class myIntWrapper
{
//this is the value wrapper holds
public int theValue;
//constructor taking the value
public myIntWrapper(int argument)
{
theValue = argument;
}
//operator to convert an int into brand-new myIntWrapper class
public static implicit operator myIntWrapper(int argument)
{
return new myIntWrapper(argument);
}
//operator to convert a myIntWrapper class into an int
public static implicit operator int(myIntWrapper wrapper)
{
return wrapper.theValue;
}
}
maintenant vous pouvez écrire :
//create an array -
//setting values to every item in array works
//thanks to operator myIntWrapper(int argument)
myIntWrapper[] myArray = new myIntWrapper[5]{1,2,3,4,5};
//now take a "reference"
myIntWrapper rr = myArray[1];
//change the value
rr.theValue = 500;
//from now on myArray[1].theValue is 500;
//thanks to operator int(myIntWrapper wrapper)
//you can write:
int ss = rr;//it works!
s'il vous plaît, rappelez-vous de ne jamais le faire : rr = 600;
parce que cela va créer un tout nouveau myIntWrapper, qui n'est "connecté" nulle part. Donc rappelez-vous :
rr.theValue = 500;//this changes the value somewhere
rr = myArray[3];//this changes where rr is "pointing" to
Oui, c'est assez compliqué mais je doute qu'il soit possible de faire plus simple sans code non sécurisé. Je suis désolé de ne pas l'avoir expliqué davantage. Je répondrai à toutes les questions dans les commentaires.