41 votes

c# - dois-je utiliser "ref" pour passer une collection (par exemple List) par référence à une méthode ?

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"?

68voto

recursive Points 34729

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
}

32voto

Lou Franco Points 48823

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.

13voto

Esteban Araya Points 12496

Vous n'avez pas besoin de ref dans votre scénario, et cela n'aidera pas non plus à la lisibilité.

ref n'est utilisé que si vous avez l'intention de modifier ce à quoi la variable fait référence, pas le contenu de l'objet auquel elle fait référence. Cela a-t-il du sens?

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