调用方法中的源值更改
本文关键字:方法 调用 | 更新日期: 2023-09-27 18:33:30
我一直在尝试更改源列表,但对方式感到困惑。
方法 1 :
static void ChangeListWithoutAddRange(List<string> list) //
{
var tempList = new List<string>() {"Three", "Four"};
list = tempList;
}
方法2:
static void ChangeListWithAddRange(List<string> list)
{
var tempList = new List<string>() { "Three", "Four" };
list.Clear();
list.AddRange(tempList);
}
以上测试方法:
var list = new List<string>() {"One", "Two"};
ChangeListWithoutAddRange(list); //count is 0,
ChangeListWithAddRange(list); // change in list value , "Three" and "Four"
我希望这两种方法都更改源列表,但方法 2 仅将源列表更改为为列表分配值的两种方法。有什么具体的原因吗?
templist 是每个方法范围内的局部变量。
在第一种方法中,您将 templist 的引用复制到原始列表,一旦该方法超过 templist(和原始列表),垃圾回收器就会释放。
在方法 2 中,addRange 将值复制到列表中,并在方法结束时释放 templist。