2010-08-13 18 views

Respuesta

22

No, no utilice una referencia a menos que desee cambiar a qué lista hace referencia la variable. Si solo desea acceder a la lista, hágalo sin ref.

Si hace un parámetro ref, está diciendo que la persona que llama debe esperar que el parámetro que pasan pueda asignarse a otro objeto. Si no está haciendo eso, entonces no está transmitiendo la información correcta. Debe suponer que todos los desarrolladores de C# entienden que se está transfiriendo una referencia de objeto.

8

No necesita ref en su escenario, ni tampoco ayuda con la legibilidad.

ref solo se usa si tiene la intención de cambiar a qué referencia hace referencia la variable, no el contenido del objeto al que hace referencia. ¿Tiene sentido?

49

Un diccionario es un tipo de referencia, por lo que no es posible pasar por el valor, aunque las referencias a un diccionario son valores. Voy a tratar de aclarar esto:

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 
} 
Cuestiones relacionadas