Погляньте на наступну програму:
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;
}
}
Я припускав myList
, що пройшов би мимо ref
, а вихід буде
3
4
Список справді "передається посилання", але sort
діє лише функція. Наступне твердження myList = myList2;
не має ефекту.
Отже, результат насправді:
10
50
100
Чи можете ви допомогти мені пояснити таку поведінку? Якщо насправді myList
не проходить перелік змін (як видно з myList = myList2
набрання чинності), як це myList.Sort()
набуває чинності?
Я припускав, що навіть це твердження не набуває чинності, а результат:
100
50
10
ChangeList
повернутись,List<int>
а не бути,void
якщо це насправді створює новий список.