Взгляните на следующую программу:
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
Список действительно "принят ref", но действует только функция sort
. Следующий оператор myList = myList2;
не имеет эффекта.
Таким образом, вывод:
10
50
100
Можете ли вы помочь мне объяснить это поведение? Если действительно myList
не передается по-ref (как это видно из myList = myList2
не действует), как действует myList.Sort()
?
Я предполагал, что это утверждение не вступает в силу, а выход будет:
100
50
10