C# “我应该用”吗;参考「;通过引用方法传递集合(如列表)?

C# “我应该用”吗;参考「;通过引用方法传递集合(如列表)?,c#,methods,pass-by-reference,C#,Methods,Pass By Reference,我应该使用“ref”通过引用方法传递列表变量吗 答案是不需要“ref”(因为列表将是一个参考变量),但是为了便于可读性,将“ref”放进去了吗 否,除非要更改变量引用的列表,否则不要使用ref。如果您只想访问列表,请不要使用ref 如果设置参数ref,则表示调用者应该期望他们传入的参数可以分配给另一个对象。如果你不这样做,那么它就不能传递正确的信息。您应该假设所有C#开发人员都知道正在传入一个对象引用。在您的场景中不需要ref,也不会有助于提高可读性 ref仅在您想要更改变量引用的对象而不是它引

我应该使用“ref”通过引用方法传递列表变量吗


答案是不需要“ref”(因为列表将是一个参考变量),但是为了便于可读性,将“ref”放进去了吗

否,除非要更改变量引用的列表,否则不要使用ref。如果您只想访问列表,请不要使用ref


如果设置参数ref,则表示调用者应该期望他们传入的参数可以分配给另一个对象。如果你不这样做,那么它就不能传递正确的信息。您应该假设所有C#开发人员都知道正在传入一个对象引用。

在您的场景中不需要
ref
,也不会有助于提高可读性


ref
仅在您想要更改变量引用的对象而不是它引用的对象的内容时使用。这有意义吗?

字典是一种引用类型,因此不可能按值传递,尽管对字典的引用是值。让我来澄清一下:

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
}
void方法1(字典目录){
dict[“a”]=“b”;
dict=新字典();
}
无效方法2(参考字典dict dict){
dict[“e”]=“f”;
dict=新字典();
}
公共图书馆{
var myDict=新字典();
myDict[“c”]=“d”;
方法1(myDict);
Console.Write(myDict[“a”]);//b
Console.Write(myDict[“c”]);//d
Method2(ref myDict);//替换为新的空白字典
Console.Write(myDict[“a”]);//键运行时错误
Console.Write(myDict[“e”]);//键运行时错误
}
[Passing By ref and out]()涵盖了类似的问题。