Hãy xem chương trình sau:
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;
}
}
Tôi cho rằng myListsẽ trôi qua refvà kết quả đầu ra sẽ
3
4
Danh sách thực sự là "được thông qua bởi ref", nhưng chỉ sorthàm có hiệu lực. Câu lệnh sau myList = myList2;không có hiệu lực.
Vì vậy, đầu ra trên thực tế là:
10
50
100
Bạn có thể giúp tôi giải thích hành vi này không? Nếu thực sự myListkhông phải là ref-by-ref (vì nó có vẻ như myList = myList2không có hiệu lực), làm thế nào myList.Sort()có hiệu lực?
Tôi đã giả định rằng ngay cả câu lệnh đó cũng không có hiệu lực và kết quả đầu ra là:
100
50
10



ChangeListlà trả về mộtList<int>thay vì là mộtvoidnếu thực tế là tạo một danh sách mới.