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

來源:互聯網
上載者:User
[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<int>(),在 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;}

數組也是一樣的道理。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.