Quand tu fais ça :
int[] myArray = {21,21,364,658,87};
int rr = myArray[1];
rr = 500;
Vous ne ferez qu'écraser la valeur dans rr, il n'y a aucun moyen pour vous d'obtenir l'adresse mémoire réelle des éléments internes d'un tableau, et donc de le mettre à jour.
Ma réponse doit donc être :
myArray[1] = 500;
J'essaie de comprendre ce que vous essayez de faire, si vous voulez encapsuler votre changement dans une fonction, vous pouvez passer la référence de cette façon, mais tout dépend de ce que vous voulez en faire :
public void Proc()
{
var ints = new [] { 1, 2, 3, 4 };
FunctionChangingByReference(ref ints[1]);
}
public void FunctionChangingByReference(ref int x)
{
x = 500;
}
En C#, il n'y a pas de pointeurs, seulement des références.
(Je mens un peu, vous pourriez utiliser des pointeurs si vous créez un contexte non sécurisé, mais nous ne faisons pas cela en C#, et vous ne devriez pas non plus. Lorsque nous codons en C++, nous le faisons, mais c'est du C++, et nous le faisons à un coût, nous rendons le code un peu plus fragile et sujet aux erreurs. Lorsque je code en C#, j'essaie d'optimiser le code à un niveau plus élevé que le brassage des adresses mémoire. Si vous avez vraiment besoin d'optimiser à ce niveau, vous devriez écrire le code en C++ et importer ce code en tant que DLL, ce qui vous permet de bien séparer les préoccupations, et n'oubliez pas de tester le développement).