调用方法中的源值更改

时间:2016-02-07 11:42:17

标签: c# list variables scope

我一直在尝试更改源列表,但却对方式感到困惑。

方法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只更改源列表,因为这两种方法都将值分配给列表。有没有具体的理由呢?

1 个答案:

答案 0 :(得分:0)

templist是每个方法范围内的局部变量。

在第一种方法中,将templist的引用复制到原始列表,一旦方法超过templist(原始列表),就会被垃圾收集器释放。

在方法2中,addRange将值复制到列表中,并在方法结束时释放templist。