Сохранить и получить доступ к списку классов в C # - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть приложение в Xamarin.Forms, которое должно позволять добавлять новый фильм в список, вызывая AddCartList. Я также пытаюсь получить доступ к каждому элементу списка.

У меня есть класс, в котором хранится информация о фильмах:

public class Movie
{
    public string movieTitle { get; set; }
    public string movieReleaseDate { get; set; }
    public int movieDuration { get; set; }
    public double movieRentalPrice { get; set; }
    public string movieRentType { get; set; }

    public Movie(string mtitle, string mdate, int mtime, double mprice, string type)
    {
        movieTitle = mtitle;
        movieReleaseDate = mdate;
        movieDuration = mtime;
        movieRentalPrice = mprice;
        movieRentType = type;
    }
}

Это создает список фильмов, выбранных пользователем для аренды:

class MoviesRentCart
{
        public List<Movie> movieRentList;
        public MoviesToRent()
        {
            movieRentList = new List<MovieRent>();
        }

        public static MoviesToRent addCartList(string title, string date, int duration, double price, string type)
        {

            MoviesToRent movieList = new MoviesToRent();

            Movie newMovie = new Movie(title, date, duration, price, type);

            movieList.movieRentList.Add(newMovie);

            return movieList;
         }
}

Мое приложение позволяетпользователь выбирает фильм для проката, и затем появляется запрос, желает ли пользователь арендовать другой фильм одновременно. Если пользователь отвечает «да», то текущий фильм добавляется в список:

MoviesToRent.AddCartList(this.title.Text, this.release_date.Text, this.run_time.Text, this.total.Text, this.type.Text);

Затем отображается предыдущая страница. Когда пользователь выбирает другой фильм для добавления, на следующей странице (той же странице, где фильм был добавлен в список) должны отображаться сведения обо всех фильмах, выбранных пользователем для проката (в списке).

var moviesToRent = new MoviesToRent();
string movie_info = "";
foreach (MovieRentCart movie in moviesToRent.movieRentList)
{
        movie_info = movie_info + "\n" + movie.movieTitle + " (" + movie.movieReleaseDate + ") [" + movie.movieDuration + " minutes]";            
 }
 this.movie_details.Text = movie_info;

Однако это ничего не отображает. Что я делаю неправильно? Фильмы должны быть добавлены в список и должны отображаться путем перебора списка.

1 Ответ

2 голосов
/ 03 ноября 2019

Есть несколько проблем с кодом, который вы опубликовали:

  1. В вашем последнем примере кода вы создаете новый экземпляр класса MoviesToRent. Этот новый экземпляр всегда будет пустым списком movieRentList, потому что вы создаете его в пустом списке в конструкторе.
  2. Метод addCartList не должен создавать новый экземпляр самого себя, и это возвращаемое значение, похоже, не получаетиспользуется в коде, который вы опубликовали. Действительно ли имеет смысл делать этот метод статичным?

Если я правильно понимаю ваш вопрос, вам нужно сохранить ссылку на фильмы, добавленные в movieRentList.

Самое быстрое решениебыло бы сделать весь класс статическим:

public static class MoviesRentCart
{
        public static List<Movie> movieRentList;

        public static void addCartList(string title, string date, int duration, double price, string type)
        {
            Movie newMovie = new Movie(title, date, duration, price, type);

            movieRentList.Add(newMovie);
         }
}

Другой подход состоял бы в том, чтобы не делать addCartList статическим методом, а затем делить экземпляр MoviesToRent между экранами:

public class MoviesRentCart
{
        public List<Movie> movieRentList = new List<Movie>();

        public void addCartList(string title, string date, int duration, double price, string type)
        {
            Movie newMovie = new Movie(title, date, duration, price, type);

            movieRentList.Add(newMovie);
         }
}

Вы можете сохранить ссылку на этот экземпляр на странице приложения, если вы используете Xamarin.Forms, или вы можете передать ее в качестве параметра на другие страницы, которым требуются данные.

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