C # список объектов класса меняется в соответствии с последним объектом? - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь создать «архив» всех прошлых версий класса (или структуры, если на то пошло).Но поскольку класс создается для добавления в список, кажется, что общая сумма перечисленных классов изменяется, чтобы соответствовать.

Мой код выглядит примерно так:

public class State
{
  public int i;

  public State(int newI)
  {
    i = newI;
  }
}

List<State> list = new List<State>;

public void NewEntry(int x)
{
  State state = new State(x); //this is the line in question
  list.Add(state)
}

ByВ то время, когда был выполнен конструктор состояний, все состояния в списке были изменены, чтобы они соответствовали своему i новому значению x.

Чего мне не хватает, кроме базовых знаний и понимания?: P

1 Ответ

0 голосов
/ 31 января 2019

Хм ... Не очень понятно из вашего примера, но позвольте мне угадать, в чем проблема.

Когда вы добавляете класс в список, вы можете добавлять ссылку.

При использовании:

State x = new State();
State b = x;

поля «x» и «b» указывают на один и тот же объект, xi и bi - это одна и та же память.

IF и если State является структурой, то она отличается

public **struct** State
{
  public int i;

  public State(int newI)
  {
    i = newI;
  }
}

Тогда

State x = new State();
State b = x;

сделает копию каждого поля значения (например, целых и двойных), и xi будетв другом месте памяти, чем bi

Это связано с вашей проблемой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...