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 myListque habría pasado ref, y la salida sería
3
4
De hecho, la lista se "pasa por ref", pero solo la sortfunció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 myListno se pasa por referencia (como parece por myList = myList2no 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



ChangeListdevolver un enList<int>lugar de unvoidsi de hecho se está creando una nueva lista.