Dai un'occhiata al seguente programma:
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;
}
}
Ho pensato che myList
sarebbe passato ref
e l'output sarebbe passato
3
4
L'elenco è effettivamente "passato da ref", ma solo la sort
funzione ha effetto. La seguente dichiarazione myList = myList2;
non ha effetto.
Quindi l'output è in effetti:
10
50
100
Puoi aiutarmi a spiegare questo comportamento? Se effettivamente myList
non viene passato per riferimento (come sembra myList = myList2
non avere effetto), come ha myList.Sort()
effetto?
Stavo assumendo che anche quella dichiarazione non avesse effetto e che l'output fosse:
100
50
10
ChangeList
restituire aList<int>
piuttosto che essere avoid
se in realtà sta creando un nuovo elenco.