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 myList
sẽ trôi qua ref
và 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ỉ sort
hà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ự myList
không phải là ref-by-ref (vì nó có vẻ như myList = myList2
khô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
ChangeList
là trả về mộtList<int>
thay vì là mộtvoid
nếu thực tế là tạo một danh sách mới.