[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
[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中文網!