首页 >后端开发 >C#.Net教程 >C# List 作为参数传递的值变化演示解说

C# List 作为参数传递的值变化演示解说

高洛峰
高洛峰原创
2016-12-15 15:48:062116浏览

[TestMethod]
public void TestMethod1()
{
    List<int> list = new List<int>();
    Test(list);
    Console.WriteLine(list.Count()); // 总数量变为 1
}

private void Test(List<int> list)
{
    list.Add(1);
}

可以发现:经过 Test 后,list 的元素数量由 0 变为 1 了。

如果是把变量 list 赋给另一个变量 list2,操作 list2 的话 list 也会跟着变。

这是因为这些变量实际上是指向另一个内存块的,对元素数量、元素值的改变都是改变的对应的同一个内存块。

但是调用他们的 ConvertAll 方法,返回的变量,就是指向另一个内存块了,就与前面的不同了。

[TestMethod]
public void TestMethod1()
{
    List<int> list = new List<int>();
    Test(list);
    Console.WriteLine(list.Count()); // 总数量仍为 0
}

private void Test(List<int> list)
{
    List<int> list2 = new List<int>();
    list2.Add(1);
    
    list = list2;
}

以上代码就不同了,这是 list = list2,实际上将 list 指向了 list2 对应的内存块,根据前面的结论,此时参数中的 list 跟 list2 是一伙的了,而不是和 TestMethod1 中的 list 的一伙。

以下代码就不同了,但现在实际上创建了两个 new Listbd43222e33876353aff11e13a7dc75f6(),在 TestMethod1() 中没人再用它了。

[TestMethod]
public void TestMethod1()
{
    List<int> list = new List<int>();
    Test(ref list);
    Console.WriteLine(list.Count()); // 总数量变为 1
}

private void Test(ref List<int> list)
{
    List<int> list2 = new List<int>();
    list2.Add(1);
    
    list = list2;
}

数组也是一样的道理。


更多C# List 作为参数传递的值变化演示解说相关文章请关注PHP中文网!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn