3 votes

Comment référencer une valeur dans un tableau C# ?

J'ai le tableau suivant :

int[] myArray = {21,21,364,658,87};

et une référence au deuxième élément comme ceci :

int rr = myArray[1];

i rr = 500

Console.writeLine(myArray[1]);// ---> should print 500 !

J'espère que vous avez compris mon idée, je peux faire cela facilement en python comme l'exemple ci-dessus. donc
comment faire cela en C#

1voto

Agent_L Points 1583

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X