首頁 >後端開發 >C#.Net教程 >C# List 作為參數傳遞的值變化演示解說

C# List 作為參數傳遞的值變化演示解說

高洛峰
高洛峰原創
2016-12-15 15:48:062118瀏覽

[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 List(),在 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