Списки становятся пустыми при обращении из другого класса, где я делаю это неправильно? - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть фильм класса, где у меня есть автоматически реализованный список 'Shows' для добавления объектов класса Show.Я могу добавить и получить к нему доступ в методе main, но когда я вызываю список из другого класса с именем Access, он дает мне пустой список.

Я создал экземпляр класса Movie в классе Access, но он создает новый список вместо получения уже существующего списка.

Мне нужен не параметризованный конструктор в Movieучебный класс.Мне также нужно иметь возможность доступа к тем же List «Шоу» и в других классах.

// The Movie class where i create the list and store all show class objects

public class Movie
{
        public List<Show> Shows { get; set; }

        public Movie()
        {
            this.Shows = new List<Show>();
        }

        public static void Main(string[] args)
        {

            // create new object of Show type
            Show s = new Show(153, 258, 391);

            Movie mv = new Movie();

            // add object to List
            mv.Shows.Add(s);

            // The output gives me 153, which is correct
            Console.WriteLine(mv.Shows.ElementAt(0).ShowID);
        }
    }

    public class Show
    {
        public int ShowID { get; set; }
        public int MovieID { get; set; }
        public int TheatreID { get; set; }

        public Show(int showid, int movieid, int theatreid)
        {
                this.ShowID = showid;
                this.MovieID = movieid;
                this.TheatreID = theatreid;
        }
    }

   // i need to Access the list in this class
   public class Access
   {
       Movie mov = new Moive();

       // the output is showing null value error
       Console.WriteLine(mov.Shows.ElementAt(0).ShowID);
   }

Мне нужно иметь возможность получать и устанавливать Список из другихклассы в одном и том же пространстве имен

Ответы [ 4 ]

1 голос
/ 11 апреля 2019

Добро пожаловать в Stackoverflow.Пожалуйста, внимательно прочитайте ваш код.В методе Main вы создаете новый объект Movie (назовем его movieA) и добавляем новый объект Show к movieA.В классе Access вы не используете MovieA, но вы снова создаете новый объект Movie.Если вы хотите получить доступ к Movie, созданному в методе Main, в классе Access, вы должны передать его туда.

public static void Main(string[] args)
{

    // create new object of Show type
    Show s = new Show(153, 258, 391);

    Movie movieA = new Movie();

    // add object to List
    movieA.Shows.Add(s);

    // The output gives me 153, which is correct
    Console.WriteLine(movieA.Shows.ElementAt(0).ShowID);

    var access = new Access();
    access.MyMethod(movieA);
}

public class Access
{
   public void MyMethod(Movie movie)
   {
       // this should work
       Console.WriteLine(movie.Shows.ElementAt(0).ShowID);
   }
}
0 голосов
/ 11 апреля 2019

Проблема кажется логичной, поскольку вы создаете экземпляр своего списка показа ( Показывает ) в конструкторе, каждый раз, когда вы создаете Фильм новый список показа ( Показывает )будет создан.

В вашем случае вы должны использовать шаблон синглтона

Шаблон синглтона - это шаблон проектирования Creational, который гарантирует один экземпляробъекта.

private static List<Show> shows;

public static List<Show> Shows
{
    get
    {
        if (shows == null)
        {
            shows = new List<Show>();
        }
        return shows;
    }
 }
0 голосов
/ 11 апреля 2019

В Access вы создаете новый Movie, вместо этого вам нужно взять Movie уже созданного.

public class Access
{
    public void ShowMovieOutput(Movie mov)
    {
        Console.WriteLine(mov.Shows.ElementAt(0).ShowID);
    }
}

public static void Main(string[] args)
{
    // create new object of Show type
    Show s = new Show(153, 258, 391);

    Movie mv = new Movie();

    // add object to List
    mv.Shows.Add(s);

    Access.ShowMovieOutput(mv);

    // The output gives me 153, which is correct
    Console.WriteLine(mv.Shows.ElementAt(0).ShowID);
}
0 голосов
/ 11 апреля 2019

У вас должен быть параметризованный конструктор для вашего класса доступа, который принимает объект Movie.

...