我一直在尝试更改源列表,但却对方式感到困惑。
方法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只更改源列表,因为这两种方法都将值分配给列表。有没有具体的理由呢?
答案 0 :(得分:0)
templist是每个方法范围内的局部变量。
在第一种方法中,将templist的引用复制到原始列表,一旦方法超过templist(原始列表),就会被垃圾收集器释放。
在方法2中,addRange将值复制到列表中,并在方法结束时释放templist。