2010-08-13 6 views

Antwort

22

Nein, verwenden Sie keine Referenz, es sei denn, Sie möchten die Liste ändern, auf die die Variable verweist. Wenn Sie nur auf die Liste zugreifen möchten, tun Sie es ohne ref.

Wenn Sie einen Parameter ref machen, sagen Sie, dass der Aufrufer erwarten sollte, dass der übergebene Parameter einem anderen Objekt zugewiesen werden kann. Wenn Sie das nicht tun, dann liefert es nicht die richtige Information. Sie sollten davon ausgehen, dass alle C# -Entwickler verstehen, dass eine Objektreferenz übergeben wird.

8

Sie benötigen weder ref in Ihrem Szenario, noch wird es mit Lesbarkeit helfen.

ref wird nur verwendet, wenn Sie ändern möchten, worauf die Variable verweist, nicht den Inhalt des Objekts, auf das sie verweist. Ist das sinnvoll?

49

Ein Wörterbuch ist ein Referenztyp, daher ist es nicht möglich, einen Wert zu übergeben, obwohl Verweise auf ein Wörterbuch Werte sind. Lassen Sie mich versuchen, dies zu klären:

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 
} 
Verwandte Themen