Dê uma olhada no seguinte programa:
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;
}
}
Eu presumi myList
que teria passado ref
, e a saída
3
4
A lista é de fato "passada por ref", mas apenas a sort
função tem efeito. A seguinte declaração myList = myList2;
não tem efeito.
Portanto, a saída é de fato:
10
50
100
Você pode me ajudar a explicar esse comportamento? Se, de fato, myList
não for ignorado (como parece por myList = myList2
não ter efeito), como o myList.Sort()
efeito tem efeito?
Eu estava presumindo que até mesmo essa declaração não teria efeito e a saída seria:
100
50
10
ChangeList
retornar um emList<int>
vez de ser umvoid
se de fato estiver criando uma nova lista.