C# ASP.NET MVC Basics Modeling and Presenting Data Adding Repository Methods

Emmanuel Nabagabo
Emmanuel Nabagabo
4,744 Points

What is wrong with the second step????

I checked all possible ways but it does not allow me to pass.

VideoGamesRepository.cs
using Treehouse.Models;

namespace Treehouse.Data
{
    public class VideoGamesRepository
    {
        // TODO Add GetVideoGames method
        public VideoGame[] GetVideoGames()
        {
            return _videoGames;
        }
        // TODO Add GetVideoGame method
        public VideoGame GetVideoGame(int id)
        {
            var videoGameToReturn = new VideoGame();
            foreach(var videoGame in _videoGames)
            {
                if(videoGame.Id == id)
                {
                    videoGameToReturn = videoGame;
                    break;
                }
            }

            return videoGameToReturn;
        }

        private static VideoGame[] _videoGames = new VideoGame[]
        {
            new VideoGame()
            {
                Id = 1,
                Title = "Super Mario 64",
                Description = "Super Mario 64 is a 1996 platform video game developed and published by Nintendo for the Nintendo 64.",
                Characters = new string[]
                {
                    "Mario",
                    "Princess Peach",
                    "Bowser",
                    "Toad",
                    "Yoshi"
                },
                Publisher = "Nintendo",
                Favorite = true
            },
            new VideoGame()
            {
                Id = 2,
                Title = "Mario Kart 64",
                Description = "Mario Kart 64 is a 1996 go-kart racing game developed and published by Nintendo for the Nintendo 64 video game console.",
                Characters = new string[]
                {
                    "Mario",
                    "Princess Peach",
                    "Bowser",
                    "Toad",
                    "Yoshi"
                },
                Publisher = "Nintendo",
                Favorite = false
            }
        };
    }
}
VideoGame.cs
namespace Treehouse.Models
{
    // Don't make any changes to this class!
    public class VideoGame
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public string[] Characters { get; set; }
        public string Publisher { get; set; }
        public bool Favorite { get; set; }

        public string DisplayText
        {
            get
            {
                return Title + " (" + Publisher + ")";
            }
        }
    }
}

2 Answers

andren
andren
28,375 Points

Your code is technically fine, and the error message the task gives is quite misleading. The reason why it does not accept your code is that if an invalid id is passed in your code returns an empty VideoGame object. The challenge expects the method to return null if no VideoGame object is found.

The challenge does not explicitly state this, but that is the value used in a similar method in a previous lecture. And it is pretty common to return null when a method like this does not find what is asked for. When a VideoGame object is returned both when an Id is found and when it is not, it becomes harder to know whether the method succeed or not.

So if you change the initial value of the videoGameToReturn variable to null and specify that it is a VideoGame variable (since var cannot determine the right type when null is used) like this:

public VideoGame GetVideoGame(int id)
{
    VideoGame videoGameToReturn = null; // Initialize with null and specify type as VideoGame
    foreach(VideoGame videoGame in _videoGames)
    {
        if(videoGame.Id == id)
        {
            videoGameToReturn = videoGame;
            break;
        }
    }
    return videoGameToReturn;
}

Then your code will be accepted.