我正在尝试理解下面的机制。
List<string> list = new List<string>();
list.Add("test");
NewLines(list);
Console.WriteLine(list.Count) // result is 1 not 0
ClearLines(list);
Console.WriteLine(list.Count) // result is 0
private static void NewLines(List<string> lines)
{
lines = new List<string>();
}
private static void ClearLines(List<string> lines)
{
lines.Clear();
}
如果C#中的参数是通过引用传递的,那么为什么在调用NewLines(list);
之后列表不为空
发布于 2021-11-02 07:19:25
除非使用ref
或out
关键字,否则始终通过值传递参数。可能令人困惑的是list
是一个引用(因为List<T>
是一个reference type)。所以当你传入list
时,你就是在传递引用的值。如果在函数中更改它的值,它仍然只是将局部变量更改为一个新的列表-它不会影响传入的变量。
因此,要让代码按照您预期的方式运行,只需添加ref
关键字:
private static void NewLines(ref List<string> lines)
{
lines = new List<string>();
}
尽管我要指出,与ref
关键字相比,返回值是首选的
https://stackoverflow.com/questions/69812622
复制