ดูโปรแกรมต่อไปนี้:
class Test
{
List<int> myList = new List<int>();
public void TestMethod()
{
myList.Add(100);
myList.Add(50);
myList.Add(10);
ChangeList(myList);
foreach (int i in myList)
{
Console.WriteLine(i);
}
}
private void ChangeList(List<int> myList)
{
myList.Sort();
List<int> myList2 = new List<int>();
myList2.Add(3);
myList2.Add(4);
myList = myList2;
}
}
ฉันคิดว่าmyList
น่าจะผ่านไปref
แล้วและผลลัพธ์ก็จะ
3
4
รายการนี้ "ส่งผ่านโดย ref" แต่เฉพาะsort
ฟังก์ชันเท่านั้นที่มีผล ข้อความต่อไปนี้myList = myList2;
ไม่มีผล
ดังนั้นผลลัพธ์จึงเป็นจริง:
10
50
100
คุณช่วยอธิบายพฤติกรรมนี้ได้ไหม หากmyList
ไม่ผ่านการอ้างอิงจริง ๆ (ตามที่ดูเหมือนว่าmyList = myList2
ไม่มีผล) จะmyList.Sort()
มีผลอย่างไร?
ฉันคิดว่าแม้คำสั่งนั้นจะไม่มีผลและผลลัพธ์จะเป็น:
100
50
10
ChangeList
จะส่งคืนList<int>
แทนที่จะเป็นvoid
หากเป็นการสร้างรายการใหม่ในความเป็นจริง