Eche un vistazo al siguiente 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;
}
}
Supuse myList
que habría pasado ref
, y la salida sería
3
4
De hecho, la lista se "pasa por ref", pero solo la sort
función tiene efecto. La siguiente declaración myList = myList2;
no tiene ningún efecto.
Entonces la salida es de hecho:
10
50
100
¿Puedes ayudarme a explicar este comportamiento? Si de hecho myList
no se pasa por referencia (como parece por myList = myList2
no tener efecto), ¿cómo entra myList.Sort()
en vigor?
Estaba asumiendo que incluso esa declaración no surtiría efecto y que el resultado sería:
100
50
10
ChangeList
devolver un enList<int>
lugar de unvoid
si de hecho se está creando una nueva lista.