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 "ref" dedans?
Non, n'utilisez pas de référence sauf si vous souhaitez modifier la liste à laquelle la variable fait référence. Si vous souhaitez simplement accéder à la liste, faites-le sans ref.
Si vous faites 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 attribué à 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.
Un dictionnaire est un type de référence, il n'est donc pas possible de passer par valeur, bien que les références à un dictionnaire soient des valeurs. Permettez-moi d'essayer de clarifier cela:
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
}
Vous n'avez pas besoin de ref
dans votre scénario, et cela n'aidera pas à la lisibilité.
ref
n'est utilisé que si vous avez l'intention de modifier ce à quoi fait référence la variable, pas le contenu de l'objet auquel elle fait référence. Cela a-t-il du sens?