Dois-je utiliser "ref" pour passer une variable de liste par référence à une méthode ?
La réponse est-elle que "ref" n'est pas nécessaire (car la liste serait une variable de référence), mais pour plus de lisibilité, mettez le "ref"?
Dois-je utiliser "ref" pour passer une variable de liste par référence à une méthode ?
La réponse est-elle que "ref" n'est pas nécessaire (car la liste serait une variable de référence), mais pour plus de lisibilité, mettez le "ref"?
Un dictionnaire est un type référence, il n'est donc pas possible de passer par valeur, bien que les références à un dictionnaire soient des valeurs. Je vais essayer d'éclaircir ceci :
void Method1(Dictionary<string, string> dict) {
dict["a"] = "b";
dict = new Dictionary<string, string>();
}
void Method2(ref Dictionary<string, string> dict) {
dict["e"] = "f";
dict = new Dictionary<string, string>();
}
public void Main() {
var myDict = new Dictionary<string, string>();
myDict["c"] = "d";
Method1(myDict);
Console.Write(myDict["a"]); // b
Console.Write(myDict["c"]); // d
Method2(ref myDict); // replaced with new blank dictionary
Console.Write(myDict["a"]); // key runtime error
Console.Write(myDict["e"]); // key runtime error
}
Non, n'utilisez pas de référence à moins que vous ne vouliez changer la liste à laquelle la variable fait référence. Si vous voulez juste accéder à la liste, faites-le sans réf.
Si vous créez une référence de paramètre, vous dites que l'appelant doit s'attendre à ce que le paramètre qu'il transmet puisse être affecté à un autre objet. Si vous ne le faites pas, cela ne transmet pas les informations correctes. Vous devez supposer que tous les développeurs C# comprennent qu'une référence d'objet est transmise.
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.