Последний добавленный элемент списка перезаписывает другие

#c# #windows #forms

#c# #Windows #формы

Вопрос:

     private List<Movie> movies = new List<Movie>();
    Movie _movie;

    _movie = new Movie();
    movie.Title = "test2";
    _movie.Year = "1992";
    movies.Add(_movie);

   _movie = new Movie();
   _movie.Title = "test2";
   _movie.Year = "1992";
   movies.Add(_movie);

   _movie = new Movie();
   _movie.Title = "test3";
   _movie.Year = "1992";
   movies.Add(_movie);

   label8.Text = movies[0].toString();
   label9.Text = movies[1].toString();
   label10.Text = movies[2].toString();
  

Хорошо, итак, я создаю небольшую программу, которая поможет мне и моим друзьям / girldfriend выбрать фильм, когда нам будет скучно. Очевидная функциональность включает добавление нового фильма в список. Я добавил туда ярлыки для тестирования, потому что каждый раз, когда я добавляю фильмы в список, последний перезаписывает все остальные.

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

Комментарии:

1. Вы уверены, что приведенный выше код не работает? Можете ли вы поделиться реализацией класса Movie? Кстати, первые два фильма имеют одинаковое название.

2. Как вы переопределили метод toString или ваш собственный метод tostring показывает этот код

3. Можете ли вы вставить весь свой код? Это выглядит как псевдокод — в ~ 5-й строке у вас просто «movie» без подчеркивания, а ближе к концу вы вызываете строчную строку toString()

Ответ №1:

Попробуйте изменить:

    label8.Text = movies[0].toString();
   label9.Text = movies[1].toString();
   label10.Text = movies[2].toString();
  

Для:

    label8.Text = movies[0].Title;
   label9.Text = movies[1].Title;
   label10.Text = movies[2].Title;
  

Причина в том, что вы сохраняете и получаете доступ к Movie классу ToString() , который не знает точно, как вы хотите его распечатать, если вы не переопределите метод string.

Вы явно не сказали, поэтому я не собираюсь предполагать, что вы переопределили метод toString (). Если вы это сделали, то вам нужно опубликовать этот код и любой другой соответствующий код из вашего Movie класса.

Комментарии:

1. Ну, я понял, что проблема была совершенно глупой, я случайно сделал все свои переменные статическими… НО, по крайней мере, я узнал, что мне нужно переопределить toString () на toString().

Ответ №2:

Этот код подходит, предполагая, что вы просто приближаетесь к тому, что делает ваш код (игнорируя синтаксические ошибки). Проблема, скорее всего, в вашей пользовательской реализации Movie ToString() .