Jetez un œil au programme suivant:
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;
}
}
Je supposais que myList
serait passé ref
, et la sortie serait
3
4
La liste est bien "passée par ref", mais seule la sort
fonction prend effet. La déclaration suivante myList = myList2;
n'a aucun effet.
Donc, la sortie est en fait:
10
50
100
Pouvez-vous m'aider à expliquer ce comportement? Si en effet myList
n'est pas passé par référence (comme il semble myList = myList2
ne pas avoir d'effet), comment myList.Sort()
prend-il effet?
Je supposais même que cette déclaration ne prenait pas effet et que la sortie était:
100
50
10
ChangeList
de renvoyer unList<int>
plutôt que d'être unvoid
s'il s'agit en fait de créer une nouvelle liste.