Spójrz na następujący program:
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;
}
}
Zakładałem myList
, że minie ref
, a wynik minie
3
4
Lista jest rzeczywiście „przekazywana przez ref”, ale tylko sort
funkcja odnosi skutek. Poniższe stwierdzenie myList = myList2;
nie ma żadnego skutku.
Tak więc wynik jest w rzeczywistości:
10
50
100
Czy możesz mi pomóc wyjaśnić to zachowanie? Jeśli rzeczywiście myList
nie jest przekazywany-by-ref (jak wynika z myList = myList2
braku efektu), jak działa myList.Sort()
?
Zakładałem, że nawet to stwierdzenie nie odniesie skutku, a wynik będzie:
100
50
10
ChangeList
byłoby zwrócićList<int>
raczej niż być a,void
jeśli w rzeczywistości jest to tworzenie nowej listy.