调用方法中的源值更改

本文关键字:方法 调用 | 更新日期: 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。