我应该使用“ref”通过引用方法来传递列表变量吗?
答案是不需要“ref”(因为列表是参考变量),但为了便于阅读,请将“ref”放入?
答案 0 :(得分:54)
字典是一种引用类型,因此虽然对字典的引用是值,但是不能通过值传递。让我试着澄清一下:
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
}
答案 1 :(得分:23)
不,除非您想要更改变量引用的列表,否则不要使用ref。如果您只想访问列表,请在没有参考的情况下进行。
如果您创建参数ref,则表示调用者应该期望他们传入的参数可以分配给另一个对象。如果你不这样做,那么它没有传达正确的信息。您应该假设所有C#开发人员都了解正在传入对象引用。
答案 2 :(得分:9)
您的方案中不需要ref
,也不会有助于提高可读性。
ref
仅在您打算更改变量引用的内容时使用,而不是它引用的对象的内容。这有意义吗?