Как исправить перезаписи при добавлении объектов в Список - PullRequest
1 голос
/ 27 марта 2019

Я пытаюсь добавить объекты в список для доступа к другим местам в программе.Однако всякий раз, когда я добавляю новый объект, все предыдущие объекты затем превращаются в копии самого последнего добавленного объекта.

Сначала я пытался использовать цикл для циклического перемещения по объектам, но обнаружил, что при добавлении нового объекта он перезаписываетсявсе остальные объекты, которые уже были в списке.Я немного огляделся и думаю, что это как-то связано со ссылками на объекты в памяти.Однако я не знаю, как исправить ссылки.

    List <ObjectTester> holder = new List<ObjectTester>();
    //for(int i =0; i<5; i++)
    //{
    //    ObjectTester objec = new ObjectTester(i.ToString());
    //    holder.Add(objec);
    //    foreach (ObjectTester o in holder)
    //    {
    //        Console.WriteLine(o.ToString());
    //    }
    //}
    holder.Add(new ObjectTester("01"));
    Console.WriteLine(holder[0]);
    holder.Add(new ObjectTester("02"));
    Console.WriteLine(holder[0]);
    Console.WriteLine(holder[1]);
public class ObjectTester
{
    private static string id;

    public ObjectTester(string _id)
    {
        id = _id;
    }
}

При выполнении закомментированной части и отображении с циклом я ожидаю увидеть 0 1 2 3 4 Однако он печатается как 4 4 4 4 4, поскольку все предыдущие значения изменены.Чтобы проверить это, я распечатал значения после добавления их в список и вывел: 0 1 1 2 2 2 3 3 3 3 4 4 4 4 4, показывая, что оно переопределяется при каждом новом добавлении в список.

1 Ответ

2 голосов
/ 27 марта 2019

Это потому, что ваш идентификатор в вашем классе ObjectTester является статическим.

Удалите ключевое слово static.Посмотрите документацию MS по ключевому слову static: модификатор static

Это не переопределяет объект.Он переопределяет поле id, поскольку, поскольку оно помечено как статическое, оно не принадлежит конкретному экземпляру класса ObjectTester.

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