Взгляните на следующую программу:
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
если он фактически создает новый список.