Ошибка: исключение типа 'System.NullReferenceException' произошло в exe - PullRequest
3 голосов
/ 24 января 2012

G'day народ

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

Я сделал Step Into и обнаружил, что исключение возникает, когда я нажимаю на добавление объекта в коллекцию (отмечено в коде ниже). Любые идеи относительно того, что может быть причиной этого?

Классы Img и Category являются простыми классами с интерфейсом inotify, а класс Movies имеет интерфейс Observable collection.

В любом случае, вот код ошибки ...

        public void LoadMovieLibrary( string libraryfile , Movies obj)
    {
        try
        {
            var libraryXML = XElement.Load( libraryfile );
            if ( libraryXML != null )
            {
                IEnumerable<XElement> movies = from element in libraryXML.Descendants( "movie" ) select element;
                foreach ( XElement movie in movies )
                {
                    ObservableCollection<Category> categoryGroup = new ObservableCollection<Category>();
                    IEnumerable<XElement> categories = from element in movie.Descendants( "category" ) select element;
                    foreach ( XElement category in categories )
                    {
                        categoryGroup.Add(
                            new Category(
                                int.Parse( category.Attribute( "id" ).Value ) ,
                                category.Attribute( "name" ).Value
                                )
                            );
                    }

                    ObservableCollection<Img> imgGroup = new ObservableCollection<Img>();
                    IEnumerable<XElement> imgs = from element in movie.Descendants( "image" ) select element;
                    foreach ( XElement img in imgs )
                    {
                        imgGroup.Add(
                            new Img(
                                img.Attribute( "type" ).Value ,
                                img.Attribute( "url" ).Value
                                )
                            );
                    }
                    try
                    {
                        obj.Add( // <= this is where it breaks
                            new Movie(
                                movie.Element( "name" ).Value ,
                                int.Parse( movie.Element( "id" ).Value ) ,
                                movie.Element( "imdbid" ).Value ,
                                movie.Element( "overview" ).Value ,
                                movie.Element( "tagline" ).Value ,
                                movie.Element( "released" ).Value ,
                                int.Parse( movie.Element( "runtime" ).Value ) ,
                                movie.Element( "trailer" ).Value ,
                                categoryGroup ,
                                imgGroup ,
                                movie.Element( "filename" ).Value
                                )
                            );
                    }
                    catch ( Exception exception )
                    {
                        MessageBox.Show( exception.Message , "Error" , MessageBoxButton.OK , MessageBoxImage.Error );
                    }
                }
            }
        }
        catch ( Exception exception )
        {
            MessageBox.Show( exception.Message , "Error" , MessageBoxButton.OK , MessageBoxImage.Error );
        }
    }

Изменить:

Большое спасибо

Оказывается, я опустил подчеркивание ...

  • movie.Element ("imdbid"). Значение

и должно было быть

  • movie.Element ("imdb_id"). Значение

1 Ответ

4 голосов
/ 24 января 2012

A NullReferenceException генерируется всякий раз, когда вы пытаетесь сделать что-то с пустой ссылкой, например, вызвать метод, получить доступ к свойству или полю и т. Д. В вашем случае это означает, что одна из следующих вещей является нулевой:

  • obj
  • movie
  • movie.Element( "name" )
  • movie.Element( "id" )
  • movie.Element( "imdbid" )
  • movie.Element( "overview" )
  • movie.Element( "tagline" )
  • movie.Element( "released" )
  • movie.Element( "runtime" )
  • movie.Element( "trailer" )
  • movie.Element( "filename" )

т.е. все, к чему вы обращаетесь к свойствам или методам в этой строке.

Протестируйте их все в отладчике, чтобы увидеть, какой из них равен нулю.

...