Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как внести изменение в объект, находящийся в списке? / 5 сообщений из 5, страница 1 из 1
18.06.2020, 11:52
    #39970478
ROLpogo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внести изменение в объект, находящийся в списке?
Добрый день!
Только начал разбираться с C# и столкнулся со следующей проблемой:
Есть структура:
Код: c#
1.
2.
3.
4.
5.
  public struct MyStruct
  {
    public string sValue1;
    public string sValue2;
  };



Хочу внести изменение в поле sValue2 объекта, находящегося в списке. Делаю так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  static List<MyStruct> MyList = new List<MyStruct>();
  MyStruct S = new MyStruct();
  S.sValue1 = "Белая";
  MyList.Add(S);

  int nCount = MyList.Count;

  for (int i = 0; i < nCount; i++)
  {
     MyStruct MS = MyList[i];
     MS.sValue2 = "Книга";
  }



Но значение не меняется, а остается пустой строкой. Подскажите, как правильно вносить изменение в объект, находящийся в списке?
...
Рейтинг: 0 / 0
18.06.2020, 12:03
    #39970482
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внести изменение в объект, находящийся в списке?
Одна из особенностей value type заключается в том, что при присвоении ты получаешь не сам объект, а его копию, и пытаешься изменить копию. Если вместо структуры использовать класс - все будет работать
...
Рейтинг: 0 / 0
18.06.2020, 12:03
    #39970483
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внести изменение в объект, находящийся в списке?
ROLpogo
Подскажите, как правильно вносить изменение в объект, находящийся в списке?

Это не объект, это структура, value-type, они присваиваются и копируются по значению. Для изменения значимых типов для них заводят интерфейс с методом, вносящим изменения, структура объявляется реализующей этот интерфейс, далее экземпляр структуры приводится к интерфейсному типу (при этом производится упаковка), и вызывается интерфейсный метод. Всё описано у Рихтера - глава 5 Primitive, Reference, and Value Types, раздел Boxing and Unboxing Value Types, подраздел Changing Fields in a Boxed Value Type by Using Interfaces.
...
Рейтинг: 0 / 0
18.06.2020, 12:04
    #39970484
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внести изменение в объект, находящийся в списке?
либо так (для структуры)
Код: c#
1.
2.
3.
     MyStruct MS = MyList[i];
     MS.sValue2 = "Книга";
     MyList[i] = MS;
...
Рейтинг: 0 / 0
18.06.2020, 12:37
    #39970492
ROLpogo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внести изменение в объект, находящийся в списке?
Спасибо за ответы!
Пока сделал так, как подсказал Shocker Pro: MyList[i] = MS;
Всё работает.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как внести изменение в объект, находящийся в списке? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]