В чём проблема с доступом к полям структуры внутри списка?

Столкнулся с неожиданным для меня поведением структуры в C#.

public struct MyStruct
{
    public int x;

    public MyStruct(int a)
    {
        x = a;
    }

    public void Change(int b)
    {
        x = b;
    }
}

public void MyFunc()
{
    List<MyStruct> myStructList = new List<MyStruct>();

    myStructList.Add(new MyStruct(13));
    // myStructList[0].x содержит значение 13

     myStructList[0].Change(43);
     // myStructList[0].x по прежнему содержит значение 13
}


Насколько я понял, из-за того что структура не ссылочный тип, а тип значения, то если элемент структуры находится в списке, то функция Change() не изменяет его значения, а чего то другого. Объясните пожалуйста где здесь кроется загвоздка? У чего именно изменяется значение в функции Change()?
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
Когда вы достаете структуру из списка через индексатор, то возвращается ее копия, вот для нее вы и вызываете метод. Потом она уничтожается, а та что лежит в списке останется не измененным.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы