List the movies I haven't seen I am new to programming and have been taking the time to learn C# by reading, doing some classes online for Unity, and using Youtube. I think you learn more from doing your own projects so I decided to write a program that asked the user to enter a movie they have not seen and then store the movie titles into a list and print out the movies they listed. I had problems getting it to take multiple movies but finally figured a way to do it but I believe there is a better way to write the program. So just asking general advice to improve upon what I have already written. Thank you.
 using System;
 using System.Collections.Generic;

 namespace MovieListProjectWithSwitch
 {
  internal class Program
  {
    private static void Main(string[] args)
    {
        Console.WriteLine(&quot;Enter a movie you want to see but have not seen it&quot;);
        var movieNotSeen = new List&lt;string&gt;();
        movieNotSeen.Add(Console.ReadLine());

        Console.WriteLine(&quot;Do you want to enter another movie? Y/N?&quot;);

        const string answerYes = &quot;y&quot;;
        const string answerNo = &quot;n&quot;;
        string userInput;

        while (true)
        {
            userInput = Console.ReadLine().ToLower();

            switch (userInput)
            {
                case answerYes:
                    {
                        Console.WriteLine(&quot;Enter your next movie you wish to add to the list&quot;);
                        movieNotSeen.Add(Console.ReadLine());
                        Console.WriteLine(&quot;Now the movies on your list are:&quot;);
                        Console.WriteLine();
                        foreach (var movie in movieNotSeen)
                            Console.WriteLine(movie);
                        Console.WriteLine();

                        Console.WriteLine(&quot;Enter another movie? Y/N?&quot;);
                        var userInput2 = Console.ReadLine().ToLower();
                        if (userInput2 == &quot;y&quot;)
                        {
                            goto case answerYes;
                        }
                        else
                        {
                            goto case answerNo;
                        }
                    }

                case answerNo:
                    {
                        Console.WriteLine(&quot;Your movies in your list are:\n&quot;);
                        foreach (var movies in movieNotSeen)
                            Console.WriteLine(movies);
                        return;
                    }
            }
        }
    }
  }
 }
Welcome to codereview. Here are my suggestions:
Functional decomposition and Naming
The trickiest part of programming is to decouple your complex problem into smaller easier (sub)problems. It is easier to tackle small and focused problems than one large and vague. So, my first suggestion would be to try to find small and independent pieces of functionalities.
In your case here is one way to decompose:

Ask for a movie and store it
Ask for continuation
Print out the already gathered movies

You can directly map these to functions:
void EnterANewMovieAndStoreIt()
bool WishToContinue()
void PrintOutMovies()

Then you can compose them like this:

Ask for a movie and store it then
Print out the already gathered movies until
the consumer Answers with yes for continuation
when (s)he Answers with no then Print out already gathered movies

With that in hand your Main function will look like this:
static void Main(string[] args)
{
    do
    {
       EnterANewMovieAndStoreIt();

       PrintOutMovies();

    } while (WishToContinue());

    PrintOutMovies();
}

Store and Retrieve functionalities
Because we have separated storage and retrieval functionalities that's why they can be really small and concise functions:
private static void EnterANewMovieAndStoreIt()
{
    Console.WriteLine();
    Console.WriteLine(&quot;Please enter a movie you want to see but have not seen it yet.&quot;);
    var movieName = Console.ReadLine();
    ToBeWatchedMovies.Add(movieName);
}

private static void PrintOutMovies()
{
    Console.WriteLine();
    Console.WriteLine(&quot;Your haven't seen but to be watched movies:&quot;);
    foreach (var movie in ToBeWatchedMovies)
        Console.WriteLine(movie);
}

As you can see they rely on a shared resource called ToBeWatchedMovies. It is defined on a class level like this: static readonly List&lt;string&gt; ToBeWatchedMovies = new List&lt;string&gt;();
Error handling
Your current implementation does not handle that case when the user enters something different then Y or N. It is a good practice to assume that a userInput can be anything and handle that accordingly. In this example we can easily ask them nicely to try to provide the answer again.
So, the WishToContinue would look like this:
private static bool WishToContinue()
{
    while(true)
    {
        Console.WriteLine();
        Console.WriteLine(&quot;Do you want to enter another movie? Y/N?&quot;);
        var userInput = Console.ReadLine();

        if (string.Equals(userInput, AnswerYes, StringComparison.OrdinalIgnoreCase))
            return true;

        if (string.Equals(userInput, AnswerNo, StringComparison.OrdinalIgnoreCase))
            return false;

        Console.WriteLine($&quot;Please provide either '{AnswerYes}' or '{AnswerNo}' &quot;);
    }
}

Obviously this code could be further optimized but my main point here is that you should try to handle the wrong inputs as well.

Let's put everything together:
class Program
{
    static readonly List&lt;string&gt; ToBeWatchedMovies = new List&lt;string&gt;();
    const string AnswerYes = &quot;y&quot;, AnswerNo = &quot;n&quot;;
    static void Main(string[] args)
    {
        do
        {
           EnterANewMovieAndStoreIt();

           PrintOutMovies();

        } while (WishToContinue());

        PrintOutMovies();
    }

    private static void EnterANewMovieAndStoreIt()
    {
        Console.WriteLine();
        Console.WriteLine(&quot;Please enter a movie you want to see but have not seen it yet.&quot;);
        var movieName = Console.ReadLine();
        ToBeWatchedMovies.Add(movieName);
    }

    private static void PrintOutMovies()
    {
        Console.WriteLine();
        Console.WriteLine(&quot;Your movies in your list are:&quot;);
        foreach (var movie in ToBeWatchedMovies)
            Console.WriteLine(movie);
    }

    private static bool WishToContinue()
    {
        while(true)
        {
            Console.WriteLine();
            Console.WriteLine(&quot;Do you want to enter another movie? Y/N?&quot;);
            var userInput = Console.ReadLine();

            if (string.Equals(userInput, AnswerYes, StringComparison.OrdinalIgnoreCase))
                return true;

            if (string.Equals(userInput, AnswerNo, StringComparison.OrdinalIgnoreCase))
                return false;

            Console.WriteLine($&quot;Please provide either '{AnswerYes}' or '{AnswerNo}' &quot;);
        }
    }
}

I hope this helped you a bit.