C# “我应该用”吗;参考「;通过引用方法传递集合(如列表)?
我应该使用“ref”通过引用方法传递列表变量吗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,则表示调用者应该期望他们传入的参数可以分配给另一个对象。如果你不这样做,那么它就不能传递正确的信息。您应该假设所有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]()涵盖了类似的问题。