2010-08-13 13 views

risposta

22

No, non utilizzare un riferimento se non si desidera modificare l'elenco a cui fa riferimento la variabile. Se vuoi semplicemente accedere alla lista, fallo senza rif.

Se si effettua un parametro ref, si sta dicendo che il chiamante deve aspettarsi che il parametro che inoltrano possa essere assegnato a un altro oggetto. Se non lo fai, allora non sta trasmettendo le informazioni corrette. Dovresti dare per scontato che tutti gli sviluppatori di C# comprendano che è stato passato un riferimento a un oggetto.

8

Non è necessario lo ref nel tuo scenario, né aiuterà con la leggibilità.

ref viene utilizzato solo se si intende modificare a cui fa riferimento la variabile, non il contenuto dell'oggetto a cui fa riferimento. Ha senso?

49

Un dizionario è un tipo di riferimento, quindi non è possibile passare per valore, sebbene i riferimenti a un dizionario siano valori. Vorrei cercare di chiarire la situazione:

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 
} 
Problemi correlati