powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как внести изменение в объект, находящийся в списке?
5 сообщений из 5, страница 1 из 1
Как внести изменение в объект, находящийся в списке?
    #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
Как внести изменение в объект, находящийся в списке?
    #39970482
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одна из особенностей value type заключается в том, что при присвоении ты получаешь не сам объект, а его копию, и пытаешься изменить копию. Если вместо структуры использовать класс - все будет работать
...
Рейтинг: 0 / 0
Как внести изменение в объект, находящийся в списке?
    #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
Как внести изменение в объект, находящийся в списке?
    #39970484
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
либо так (для структуры)
Код: c#
1.
2.
3.
     MyStruct MS = MyList[i];
     MS.sValue2 = "Книга";
     MyList[i] = MS;
...
Рейтинг: 0 / 0
Как внести изменение в объект, находящийся в списке?
    #39970492
ROLpogo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответы!
Пока сделал так, как подсказал Shocker Pro: MyList[i] = MS;
Всё работает.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как внести изменение в объект, находящийся в списке?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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